我已经从活动中创建了一个已启动的服务。我很好奇:如果活动被破坏会发生什么?该服务仍在运行吗? (我认为它会运行!)
然后,当重新创建活动时,有没有办法与该服务进行通信?我只需要知道服务是否仍在运行,如果正在运行,那么我想将活动的引用传递给服务。
答案 0 :(得分: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函数中发生的事情如下:
因此,在回答您的问题时,是的,您可以检查它是否从启动它的任务中运行。即使您退出任务并再次启动它。您还可以检查是否从其他活动或应用程序运行。
注意:此代码是为兼容2.x而编写的。如果您在版本3或更高版本中进行下载,请使用下载管理器而不是编写自己的下载服务。