1.修复sql时间计算错误。
authorkfl_614 <kfl_614@163.com>
Tue, 7 Apr 2020 10:17:37 +0000 (18:17 +0800)
committerkfl_614 <kfl_614@163.com>
Tue, 7 Apr 2020 10:17:37 +0000 (18:17 +0800)
2.修改线程池。
3.添加零点接收广播

app/src/main/java/com/ic/work/MainActivity.java
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/db/dao/PedDao.java

index 1635e79..e4e42ad 100644 (file)
@@ -2,6 +2,7 @@ package com.ic.work;
 
 import androidx.appcompat.app.AppCompatActivity;
 
+import android.app.AlarmManager;
 import android.content.Context;
 import android.nfc.Tag;
 import android.os.Bundle;
@@ -49,7 +50,7 @@ public class MainActivity extends AppCompatActivity {
 
         OffsetDateTime time = OffsetDateTime.now(ZoneId.systemDefault()).plusDays(1);
 
-        new Handler().postDelayed(new Runnable() {
+        /**new Handler().postDelayed(new Runnable() {
             @Override
             public void run() {
                 int count=0;
@@ -63,7 +64,7 @@ public class MainActivity extends AppCompatActivity {
                 }
 
             }
-        },1000);
+        },1000);**/
     }
 
 
index 23f4f68..03b901a 100644 (file)
@@ -3,6 +3,7 @@ package com.ic.work;
 import java.util.concurrent.Executor;
 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;
@@ -14,6 +15,8 @@ public class ThreadPoolManager {
 
     private ExecutorService mTheadPool;
 
+    private Future mFuture;
+
     public static final synchronized ThreadPoolManager getInstance() {
         if (mInstance == null) {
             mInstance = new ThreadPoolManager();
@@ -29,16 +32,13 @@ public class ThreadPoolManager {
         if (runnable == null)
             return;
 
-        mTheadPool.execute(runnable);
+        mFuture = mTheadPool.submit(runnable);
     }
 
     /**
      * 从线程池中移除任务
      */
-    public void remove(Runnable runnable) {
-        if (runnable == null)
-            return;
-
-       // mTheadPool.remove(runnable);
+    public void remove() {
+        mFuture.cancel(true);
     }
 }
index 1aae415..63267d6 100644 (file)
@@ -36,6 +36,9 @@ import com.ic.work.weather.WeatherHelper;
 import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 import org.greenrobot.eventbus.ThreadMode;
+import org.threeten.bp.Duration;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZoneId;
 
 public class WorkService extends Service {
 
@@ -59,7 +62,7 @@ public class WorkService extends Service {
 
     private MessengerCoreService coreService;
 
-    private BloodRunnable mBloodRun;
+    private LocalDateTime mFinishTime;
 
     @Override
     public IBinder onBind(Intent intent) {
@@ -210,16 +213,10 @@ public class WorkService extends Service {
                 ThreadPoolManager.getInstance().execute(new PedRecordRunnable(mApp.getRepository()));
                 break;
             case 3:
-                if (mBloodRun == null) {
-                    mBloodRun = new BloodRunnable();
-                }
-                ThreadPoolManager.getInstance().execute(mBloodRun);
+                ThreadPoolManager.getInstance().execute(new BloodRunnable());
                 break;
             case 4:
-                if (mBloodRun != null) {
-                    ThreadPoolManager.getInstance().remove(mBloodRun);
-                    mBloodRun = null;
-                }
+                ThreadPoolManager.getInstance().remove();
                 break;
             case 5:
                 ThreadPoolManager.getInstance().execute(new WeatherDBRun(mApp.getWeatherRepository()));
@@ -231,7 +228,6 @@ public class WorkService extends Service {
         IntentFilter filter = new IntentFilter();
         filter.addAction(GET_PED_ACTION);
         filter.addAction(PED_FINISH_ACTION);
-        filter.addAction(Intent.ACTION_DATE_CHANGED);
         filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
         registerReceiver(mIntentReceiver, filter);
     }
@@ -267,23 +263,33 @@ public class WorkService extends Service {
                         break;
                     case PED_FINISH_ACTION:
                         IcLog.i(TAG,"PED_FINISH_ACTION");
-                        //完成,需要把所有的今天的数据全部写入到数据中
-                        int count = intent.getIntExtra(PED_TOTAL_KEY, 0);
-                        ThreadPoolManager.getInstance().execute(new WritePedTotalRunnable(
-                                mApp.getApplicationContext(),
-                                mApp.getRepository(),
-                                count));
-                        break;
-                    case Intent.ACTION_DATE_CHANGED:
-                        IcLog.i(TAG,"ACTION_DATE_CHANGED");
-                        mWeatherHelper.startLocation(getApplicationContext(), true);
-                        postPedThread();
+                        everyDayFinish(intent);
                         break;
                 }
             }
         }
     };
 
+    private void everyDayFinish(Intent intent){
+        if(mFinishTime != null){
+            LocalDateTime time = LocalDateTime.now(ZoneId.systemDefault());
+            if(Duration.between(time,mFinishTime).toDays() < 1){
+                return;
+            }
+        }
+        IcLog.i(TAG,"everyDayFinish");
+        mFinishTime = LocalDateTime.now(ZoneId.systemDefault());
+
+        //完成,需要把所有的今天的数据全部写入到数据中
+        mWeatherHelper.startLocation(getApplicationContext(), true);
+        int count = intent.getIntExtra(PED_TOTAL_KEY, 0);
+        ThreadPoolManager.getInstance().execute(new WritePedTotalRunnable(
+                mApp.getApplicationContext(),
+                mApp.getRepository(),
+                count));
+        postPedThread();
+    }
+
     private void postPedThread() {
         ThreadPoolManager.getInstance().execute(new PedRunnable(mApp.getApplicationContext(), mApp.getRepository()));
     }
index c054b79..97399b6 100644 (file)
@@ -14,13 +14,13 @@ import java.util.List;
 public interface PedDao {
 
     //查询时间对应的记录,可能为空。
-    @Query("SELECT * FROM icPedDb WHERE date(pedDate) = date(:currDate)")
+    @Query("SELECT * FROM icPedDb WHERE date(pedDate,'localtime') = date(:currDate,'localtime')")
     List<PedEntity> loadDatePedList(OffsetDateTime currDate);
 
     @Query("SELECT COUNT(id) FROM icPedDb")
     int queryCountPed();
 
-    @Query("SELECT * FROM icPedDb ORDER BY date(pedDate) limit 1")
+    @Query("SELECT * FROM icPedDb ORDER BY date(pedDate,'localtime') limit 1")
     List<PedEntity> loadOldestDatePedList();
 
     @Query("SELECT * FROM icPedDb")