我知道当Androids杀死服务时onDestroy()不一定被调用(我的意思是真的死了没有正确停止这项服务)。我有一个启动异步任务的前台服务,我必须确保在服务被终止时取消正在运行的任务。服务和异步任务与用于启动服务的活动一起在同一进程中运行。
我的问题是现在如何取消这个任务,当我不能依赖onDestroy()时会被调用?完全有可能Android会杀死单个服务并让进程和任务继续运行,或者Android只能杀死整个进程吗?最后一个对我来说没问题,因为这也将确保任务停止。
答案 0 :(得分:0)
请参阅此处的文档:http://developer.android.com/reference/android/app/Service.html
Android系统将尝试保持托管服务的进程 只要服务已启动或已绑定客户端即可 它。当内存不足而需要杀死现有内存时 流程 [...]
因此,如果您的AsyncTask和服务共享该进程,则两者都将关闭。
答案 1 :(得分:0)
您可以为此编写测试/测试代码;
异步任务定义
doInBackground() {
while (isHostingServiceRunning()) {
// Do some stuff.
}
cancel();
}
private boolean isHostingServiceRunning() {
final ActivityManager activityManager = (ActivityManager) Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
for (RunningServiceInfo runningServiceInfo : services) {
if (runningServiceInfo.service.getClassName().equals(<hostingServiceClassName>)){
return true;
}
}
return false;
}
然后在手动停止服务后在return false
上放置一个调试点。如果它被击中,那么可能会认为你的任务超过了你的服务。
我怀疑其他人是正确的(杀人意味着杀死每个潜在的进程)但我有兴趣知道是否可以孤立这样的异步任务。