gpt4 book ai didi

java - IntentService 中的 ExecutorService。会被安卓干掉吗?

转载 作者:太空狗 更新时间:2023-10-29 16:15:57 28 4
gpt4 key购买 nike

我写了一个 IntentService,我将使用它从 Web 下载一些大数据(主要是大图像)。

这个类看起来像这样:

public class UpdateService extends IntentService {

public UpdateService() {
super(UpdateService.class.getCanonicalName());
}

@Override
protected void onHandleIntent(Intent intent) {

final ExecutorService executorService = Executors.newFixedThreadPool(3);
List<ListenableFuture> futures = new ArrayList<>();

for(Runnable r : getRunnables()){
executorService.execute(r);
futures.add(r.getFuture());
}

Futures.addCallback(

Futures.allAsList( futures ),

new FutureCallback<List<Boolean>>() {
@Override
public void onSuccess(List<Boolean> result) {
// do some logic here
executorService.shutdown();
}

@Override
public void onFailure(Throwable t) {
// do some error handling here
executorService.shutdown();
}
}
);

}
}

如您所见,onHandleIntent() 方法返回得非常快,因为大部分 Activity 都是在 ExecutorService 执行的 Runnable 中执行的。

onHandleIntent() 方法返回一段时间后,android 会终止 IntentService 并随后终止由 ExecutorService 启动的线程吗?

或者它是否以某种方式检测到线程仍然存在并且 Intent 服务仍然存在?

万一,怎么改代码,让Android不杀服务?

最佳答案

Will android kill the IntentService

IntentService 将通过 stopSelf() 自行销毁。

and consequently kill the threads started by the ExecutorService after some time

线程被泄漏,但它们会运行,直到进程终止。由于您不再有一个 Service 告诉 Android 您的进程正在工作,您的进程可能会很快终止。

how to change the code to prevent Android from killing the service?

不要使用 IntentService。使用 Service,并在所有线程完成工作后自行调用 stopSelf()

关于java - IntentService 中的 ExecutorService。会被安卓干掉吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27757720/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com