![](/img/trans.png)
[英]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.