[英]How to prevent multiple databases from being created within Android app?
[英]How to prevent multiple ScheduledExecutorServices from being created upon reopening activity
我的問題是,在項目中打開某個活動后,我初始化了ScheduledExecutorService,每20秒向IntentService類發送一個Intent。
現在,當我第一次打開包含ScheduledExecutorService的活動時,Intent按計划每20秒觸發一次。
當我退出活動(停留在應用程序中)然后重新進入活動時,就會出現問題。 這導致Intent在20秒的窗口中發送兩次,我認為這與在活動的onResume中創建新的ScheduledExecutorService有關。
如何確保在任何給定時間只有一個ScheduledExecutorService實例?
相關代碼如下:
@Override
public void onResume() {
super.onResume();
ScheduledExecutorService scheduleIntentSender = Executors.newScheduledThreadPool(1);
scheduleIntentSender.scheduleAtFixedRate(new Runnable() {
public void run() {
sendIntent();
}
}, 0, 20,TimeUnit.SECONDS);
mDownloadStateReceiver =
new DownloadStateReceiver();
// Registers the DownloadStateReceiver and its intent filters
LocalBroadcastManager.getInstance(this).registerReceiver(
mDownloadStateReceiver,
testIntentFilter);
}
我建議您在“ Activity
不要這樣做,因為它旨在顯示UI。 而是在Service
執行此操作。 您可以啟動一個Service
於onStart
和跟蹤執行人的狀態,你的Service
,無論是推出與否。 Service
很好,因為它是一個后台組件,完全與UI無關。 在屏幕旋轉等過程中不會受到影響。
關閉活動后,您應該取消以前的ScheduledExecutorService
:
ScheduledExecutorService scheduleIntentSender = Executors.newScheduledThreadPool(1);
final ScheduledFuture schedulHandler = scheduleIntentSender.scheduleAtFixedRate(new Runnable() {
public void run() {
sendIntent();
}
}, 0, 20,TimeUnit.SECONDS);
//Call schedulHandler.cancel(true) to cancel scheduleIntentSender in onDestroy()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.