fixed task can not remove
authorkfl_614 <kfl_614@163.com>
Thu, 3 Dec 2020 11:39:57 +0000 (19:39 +0800)
committerkfl_614 <kfl_614@163.com>
Thu, 3 Dec 2020 11:39:57 +0000 (19:39 +0800)
app/src/main/java/com/ic/work/ThreadPoolManager.java
app/src/main/java/com/ic/work/WorkService.java
app/src/main/java/com/ic/work/hardware/BloodRunnable.java
app/src/main/java/com/ic/work/hardware/TemperatureRunnable.java
app/src/main/java/com/ic/work/process/BloodProcess.java

index abb97d7..a356209 100644 (file)
@@ -1,22 +1,24 @@
 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();
         }
@@ -24,20 +26,24 @@ public class 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);
+        }
+
     }
 }
index 45a0583..cada709 100644 (file)
@@ -5,8 +5,6 @@ import android.content.BroadcastReceiver;
 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;
@@ -56,8 +54,6 @@ import org.threeten.bp.Duration;
 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;
@@ -358,14 +354,20 @@ public class WorkService extends Service {
      */
     @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;
@@ -375,10 +377,6 @@ public class WorkService extends Service {
             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;
index ebd22d3..19cda8d 100644 (file)
@@ -1,12 +1,5 @@
 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;
@@ -19,7 +12,6 @@ import org.greenrobot.eventbus.EventBus;
 
 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;
@@ -128,8 +120,10 @@ public class BloodRunnable implements Runnable {
 
         } 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();
         }
     }
index 56a29cf..150b0f4 100644 (file)
@@ -1,7 +1,6 @@
 package com.ic.work.hardware;
 
 
-
 import com.ic.work.event.TaskFinishedEvent;
 import com.ic.work.event.TemperatureResultCompleteEvent;
 import com.ic.work.event.TemperatureResultEvent;
@@ -34,7 +33,6 @@ public class TemperatureRunnable implements Runnable {
                 HardwareUtils.disablePedometer();
                 if (HardwareUtils.enableTemperature()) {
                     IcLog.i(TAG, "getNdkTemperatureValue  enableTemperature");
-
                     Thread.sleep(1000);
                 }
 //                    }
@@ -49,14 +47,16 @@ public class TemperatureRunnable implements Runnable {
                         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) {
index 7bdadb9..41628d4 100644 (file)
@@ -6,7 +6,6 @@ import android.os.RemoteException;
 
 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;
 
@@ -46,6 +45,7 @@ public class BloodProcess {
 
         @Override
         public void stopCheckBlood() throws RemoteException {
+            IcLog.d(TAG, "remote call stopCheckBlood..");
             EventBus.getDefault().post(new ThreadPoolEvent(STOP_ALL_TASK));
         }
     };