建议在互联网上的多篇文章中不要吞咽InterruptedException。当我要重用同一个线程时,使用这样的线程池执行程序来执行此操作更有意义。
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(() -> {
printNumbers(); // first call
printNumbers(); // second call
});
Thread.sleep(3_000);
executor.shutdownNow(); // will interrupt the task
executor.awaitTermination(3, TimeUnit.SECONDS);
}
private static void printNumbers() {
for (int i = 0; i < 10; i++) {
System.out.print(i);
try {
Thread.sleep(1_000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // preserve interruption status
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面来自DZone的代码示例。
但是在每次创建新线程的情况下:
Object LOCK = …Run Code Online (Sandbox Code Playgroud) 我的应用程序在 Process1 中运行,并且我正在使用在 Process2 下运行的另一个应用程序提供的内容提供程序。当 Process2 终止时,会导致在 Process1 下运行的我的应用程序被终止。
09-14 23:31:52.583 782 1351 I ActivityManager: Killing 11797:com.example.myapp/1000 (adj 100): depends on provider com.example.exampleapp/com.example.exampleapp.MyContentProvider in dying proc com.example.exampleapp (adj 100)
09-14 23:31:52.585 782 812 W libprocessgroup: kill(-11797, 9) failed: No such process
09-14 23:31:52.585 782 812 I libprocessgroup: Successfully killed process cgroup uid 1000 pid 11797 in 0ms
09-14 23:31:52.623 368 368 I Zygote : Process 11797 exited due to signal (9)
Run Code Online (Sandbox Code Playgroud)
我在 SO 中遇到了这个很好的答案,它基本上解释了当我们对内容提供商进行内容观察者与查询时会发生什么。
但我不清楚为什么 android 会杀死整个过程。为什么不能在应用程序级别处理这个问题,DeadObjectException …
android android-contentprovider contentobserver android-activitymanager contentproviderclient