Я написал IntentService, который я собираюсь использовать для загрузки некоторых тяжелых данных из Интернета (большие изображения в основном).ExecutorService внутри IntentService. Будет ли он убит Android?
Класс выглядит следующим образом:
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()
возвращается довольно быстро, так как большая часть деятельности осуществляется в рамках Runnables исполняемых ExecutorService.
Будет ли андроид убить IntentService и, следовательно, убить потоки, начатые ExecutorService
, через некоторое время, когда возвращается метод onHandleIntent()
?
Или это как-то обнаруживает, что потоки все еще существуют, а служба намерений все еще жива?
В случае, как изменить код, чтобы запретить Android убивать службу?
Спасибо, отлично объяснено – Giordano