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;
private ExecutorService mTheadPool;
+ private Future mFuture;
+
public static final synchronized ThreadPoolManager getInstance() {
if (mInstance == null) {
mInstance = new 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);
}
}
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 {
private MessengerCoreService coreService;
- private BloodRunnable mBloodRun;
+ private LocalDateTime mFinishTime;
@Override
public IBinder onBind(Intent intent) {
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()));
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);
}
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()));
}
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")