package com.ic.work;
-import java.util.concurrent.Executor;
+import com.ic.work.utils.IcLog;
+
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
public class ThreadPoolManager {
+ private static final String TAG = "ThreadPoolManager";
private static ThreadPoolManager mInstance;
- private ExecutorService mTheadPool;
+ private final ExecutorService mThreadPool;
+
+ private final List<Future<?>> futures = new ArrayList<>();
- private Future mFuture;
- public static final synchronized ThreadPoolManager getInstance() {
+ public static synchronized ThreadPoolManager getInstance() {
if (mInstance == null) {
mInstance = new ThreadPoolManager();
}
}
private ThreadPoolManager() {
- mTheadPool = Executors.newSingleThreadExecutor();
+ mThreadPool = Executors.newSingleThreadExecutor();
}
public void execute(Runnable runnable) {
if (runnable == null)
return;
-
- mFuture = mTheadPool.submit(runnable);
+ Future<?> future = mThreadPool.submit(runnable);
+ futures.add(future);
}
/**
* 从线程池中移除任务
*/
public void remove() {
- mFuture.cancel(true);
+ IcLog.d(TAG, "remove all task..");
+ for (Future<?> future : futures) {
+ future.cancel(true);
+ }
+
}
}
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
import android.os.Build;
import android.os.IBinder;
import android.text.TextUtils;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.ZoneId;
-import java.util.Observable;
-
import static com.ic.work.utils.ICWorkConstants.EventType.STOP_ALL_TASK;
import static com.ic.work.utils.ICWorkConstants.EventType.TEST_A9_BLOOD;
import static com.ic.work.utils.ICWorkConstants.EventType.TEST_AK_BLOOD;
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(ThreadPoolEvent event) {
- IcLog.i(TAG, "onMessageEvent EventType " + event.getEventType());
+ int eventType = event.getEventType();
+ IcLog.i(TAG, "onMessageEvent EventType " + eventType);
+ if (eventType == STOP_ALL_TASK) {
+ ThreadPoolManager.getInstance().remove();
+ mIsBusy = false;
+ return;
+ }
if (mIsBusy) {
IcLog.d(TAG, "task is running..");
return;
}
//进来了就繁忙了,除非是停止了,也就是4的Case,停止检测
mIsBusy = true;
- switch (event.getEventType()) {
+ switch (eventType) {
case 1:
ThreadPoolManager.getInstance().execute(new PedRunnable(mApp.getApplicationContext(), mApp.getRepository()));
break;
case 3:
ThreadPoolManager.getInstance().execute(new BloodRunnable());
break;
- case STOP_ALL_TASK:
- ThreadPoolManager.getInstance().remove();
- mIsBusy = false;
- break;
case 5:
ThreadPoolManager.getInstance().execute(new WeatherDBRun(mApp.getWeatherRepository()));
break;
package com.ic.work.hardware;
-import android.content.Context;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-
-import com.ic.work.event.AkBloodCheckResultEvent;
import com.ic.work.event.BloodCheckResultEvent;
import com.ic.work.event.BloodCheckTempEvent;
import com.ic.work.event.BloodCheckTipsEvent;
import java.util.Random;
-import static android.content.Context.SENSOR_SERVICE;
import static com.ic.aidl.blood.BloodState.BLOOD_ING_CHECK;
import static com.ic.aidl.blood.BloodState.BLOOD_NOT_DATA_CHECK;
import static com.ic.aidl.blood.BloodState.BLOOD_NOT_DEVICE;
} catch (InterruptedException e) {
IcLog.e(TAG, "Stop Get Heart Value", e);
- } catch (Exception ee) {
+ } catch (Exception e) {
+ e.printStackTrace();
} finally {
+ IcLog.d(TAG, "disable ppg..");
HardwareUtils.onNdkDisablePPG();
}
}
package com.ic.work.hardware;
-
import com.ic.work.event.TaskFinishedEvent;
import com.ic.work.event.TemperatureResultCompleteEvent;
import com.ic.work.event.TemperatureResultEvent;
HardwareUtils.disablePedometer();
if (HardwareUtils.enableTemperature()) {
IcLog.i(TAG, "getNdkTemperatureValue enableTemperature");
-
Thread.sleep(1000);
}
// }
animal = HardwareUtils.getBodyTempFromWristTemp(testValue, room_temperature);
}
IcLog.i(TAG, "getNdkTemperatureValue Value:" + testValue + " TempOut:" + tempout + " bodyTemp:" + animal);
- if (tempout > 50 || tempout < 10 || testValue < 10 || testValue > 50) {
- IcLog.i(TAG, "getNdkTemperatureValue TempOut or Wirst Value out of range skip send it ! ");
- } else {
- lastBodyTemp = animal;
- lastWristTemp = testValue;
- lastTempOut = tempout;
- EventBus.getDefault().post(new TemperatureResultEvent(testValue, animal, tempout));
- }
+ //if (tempout > 50 || tempout < 10 || testValue < 10 || testValue > 50) {
+ // 提交
+ //if (tempout > 50 || tempout < 10 || testValue < 10 || testValue > 50) {
+ IcLog.i(TAG, "getNdkTemperatureValue TempOut or Wirst Value out of range skip send it ! ");
+ //} else {
+ lastBodyTemp = animal;
+ lastWristTemp = testValue;
+ lastTempOut = tempout;
+ EventBus.getDefault().post(new TemperatureResultEvent(testValue, animal, tempout));
+ //}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
import com.ic.aidl.blood.IBloodAidlInterface;
import com.ic.aidl.blood.IBloodRemoteService;
-import com.ic.work.ThreadPoolManager;
import com.ic.work.event.ThreadPoolEvent;
import com.ic.work.utils.IcLog;
@Override
public void stopCheckBlood() throws RemoteException {
+ IcLog.d(TAG, "remote call stopCheckBlood..");
EventBus.getDefault().post(new ThreadPoolEvent(STOP_ALL_TASK));
}
};