在Activity被销毁并重新创建后,Access Started Service



我已经从一个活动创建了一个Started Service。我很好奇:如果活动被破坏会发生什么?服务仍在运行吗?(我认为它在运行!)

那么,当重新创建活动时,是否有任何方法可以与该服务进行通信?我只需要知道服务是否仍在运行,如果正在运行,那么我想将活动的引用传递给服务。

好吧,注释不够大。以下是我用来启动服务的一些代码。启动服务之后,我使用一个函数来确定服务是否正在运行。类DownloadDatabase扩展了IntentService。该服务下载一个70兆字节的SQLite数据库,该数据库是在安卓系统外部创建的。

 Intent intentService = new Intent(this, DownloadDatabase.class);
 startService(intentService);

以下函数检查服务是否已在运行。它被编码为一个函数,因为我从其他例程调用它,这些例程在不运行的情况下进行其他验证。

private boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager
            .getRunningServices(Integer.MAX_VALUE)) {
        if ("com.hodsonssoftwarellc.nutritionexplorer.DownloadDatabase"
                .equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

您还需要在您的清单中获得以下许可:

 uses-permission android:name="android.permission.GET_TASKS"

isMyServiceRunning函数中发生的情况如下:

  1. 此时将获取"活动管理器"
  2. 将检索当前正在运行的任务列表,并将其用作循环的特殊情况下的参数
  3. 当从列表中检索每个任务时,会将任务名称与下载服务的完全限定类名进行比较
  4. 如果找到匹配项,函数将返回true。否则返回false

所以,在回答你的问题时,是的,你可以检查它是否从你的任务中运行,以启动它。即使你退出任务并重新启动它。您还可以检查是否从其他活动或应用程序运行。

注意:此代码是为兼容2.x而编写的。如果您正在进行版本3或更高版本的下载,请使用下载管理器,而不是编写自己的下载服务。

最新更新