IntentService 中的 ExecutorService。会被安卓干掉吗?
ExecutorService inside an IntentService. Will it be killed by Android?
我写了一个 IntentService,我将使用它从 Web 下载一些大数据(主要是大图像)。
class 看起来像这样:
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()
方法 returns 很快,因为大多数 activity 是在 Runnables 中执行的执行器服务。
android 会在返回 onHandleIntent()
方法一段时间后终止 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()
。
我写了一个 IntentService,我将使用它从 Web 下载一些大数据(主要是大图像)。
class 看起来像这样:
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()
方法 returns 很快,因为大多数 activity 是在 Runnables 中执行的执行器服务。
android 会在返回 onHandleIntent()
方法一段时间后终止 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()
。