1

我知道当 Androids 杀死一个服务时,不一定会调用 onDestroy() (我的意思是真的杀死了没有正确停止这个服务)。我有一个启动异步任务的前台服务,我必须确保在服务被终止时取消正在运行的任务。服务和异步任务与用于启动服务的活动一起在同一进程中运行。

我现在的问题是当我不能依赖 onDestroy() 将被调用时如何取消此任务?Android有可能会终止单个服务并让进程和任务继续运行,还是Android只会终止整个进程?最后一个对我来说没问题,因为这也将确保任务停止。

4

2 回答 2

0

请参阅此处的文档:http: //developer.android.com/reference/android/app/Service.html

只要服务已启动或绑定了客户端,Android 系统就会尝试保持托管服务的进程。当内存不足并需要终止现有进程时[...]

因此,如果您的 AsyncTask 和服务共享该进程,则两者都会关闭。

于 2012-11-22T13:29:19.080 回答
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然后在手动停止服务后放置一个调试点。如果它被击中,那么可以说你的任务比你的服务寿命长。

我怀疑其他人是对的(杀死意味着杀死每个底层进程),但我很想知道是否有可能孤立这样的异步任务。

于 2012-11-22T13:41:24.860 回答