0

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

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

4

1 回答 1

1

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

 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. 检索当前正在运行的任务列表并将其用作特殊情况 for 循环中的参数。
  3. 从列表中检索每个任务时,将任务名称与下载服务的完全限定类名称进行比较。
  4. 如果找到匹配项,则该函数返回 true。否则返回false。

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

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

于 2012-07-21T22:13:06.373 回答