如何解决Android:关机后,ExecutorService无法再次启动
我正在扩展Executorservice
的类中创建Application
的静态实例
- MyApplication类
public class MyApplication extends Application {
private static final int NUMBER_OF_THREADS = 4;
public static ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);
}
有2个活动使用的是executorservice,然后shutdown()
-
由用户启动的
- MainActivity在onDestroy()中执行shutdown()
@Override
protected void onDestroy() {
super.onDestroy();
// Wait for all tasks to complete then shutdown
MyApplication.databaseWriteExecutor.shutdown();
}
(没问题,我可以在关闭并重新打开应用后使用MyApplication.databaseWriteExecutor
)
这里也一样... onDestroy()中的shutdown()执行程序服务 现在,如果我再次打开应用程序(MainActivity)并执行任何使用executorservice的操作,则应用程序将异常崩溃
E AndroidRuntime: Process: com.pk.alarmclock,PID: 25354
E AndroidRuntime: java.util.concurrent.RejectedExecutionException:
Task com.pk.alarmclock.alarm.db.AlarmRepository$4@b99c8c4 rejected from java.util.concurrent.ThreadPoolExecutor@73e63ad[Terminated,pool size = 0,active threads = 0,queued tasks = 0,completed tasks = 0]
如果我在重新打开应用程序后在MainActivity的onCreate()中检查if(MyApplication.databaseWriteExecutor.isShutdown())
,它也会返回true
我不明白为什么在从AlarmTriggerActivity
中执行shutdown()后不重新执行执行器服务,但是如果通过MainActivity中的shutdown()也可以使用同样的方法
解决方法
我发现在AlarmTriggerActivity
上调用finish()之后,应用程序进程仍然存在。因为MyApplication
在重新打开应用程序和{{1}的相同实例时没有再次启动}(曾经是ExecutorService
)
作为临时解决方案,我在shutdown()
中未使用shutdown()
并且仅在肯定会因从最近用户/系统中滑动而杀死应用的AlarmTriggerActivty
中使用它(因此,在创建MainActivity
时会创建ExecutorService
的新实例)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。