【发布时间】:2020-10-19 05:44:49
【问题描述】:
我在扩展Application 的类中创建Executorservice 的静态实例
- MyApplication 类
public class MyApplication extends Application {
private static final int NUMBER_OF_THREADS = 4;
public static ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);
}
有 2 个活动使用然后shutdown() executorservice
- 用户启动的MainActivity在onDestroy()中执行shutdown()
@Override
protected void onDestroy() {
super.onDestroy();
// Wait for all tasks to complete then shutdown
MyApplication.databaseWriteExecutor.shutdown();
}
(这里没问题,我可以在关闭并重新打开应用程序后使用MyApplication.databaseWriteExecutor)
- AlarmTriggerActivity:由 AlarmManager 启动(此时应用未运行),用户可以通过按钮关闭闹钟(停止相关服务并调用 finish())
同样的事情...... 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 关闭()后没有重新初始化,但如果从 MainActivity 关闭(),同样的事情
【问题讨论】:
标签: android database android-room executorservice