我从活动创建了一个已启动的服务。我很好奇:如果活动被破坏会发生什么?服务是否仍然运行? (我认为它运行!)活动被破坏并重新创建后开始访问服务
然后,当活动重新创建,有什么办法与该服务进行通信?我只需要知道服务是否仍在运行,如果正在运行,那么我想将活动的引用传递给服务。
我从活动创建了一个已启动的服务。我很好奇:如果活动被破坏会发生什么?服务是否仍然运行? (我认为它运行!)活动被破坏并重新创建后开始访问服务
然后,当活动重新创建,有什么办法与该服务进行通信?我只需要知道服务是否仍在运行,如果正在运行,那么我想将活动的引用传递给服务。
好的,评论不够大。以下是我用来启动服务的一些代码。启动服务之后是一个函数,用于确定服务是否正在运行。 DownloadDatabase类扩展了IntentService。该服务下载一个由Android外部创建的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功能发生如下:
所以,回答你的问题,是的,你可以检查它是否从你的任务开始运行。即使您退出该任务并重新开始。您还可以检查是否正在从不同的活动或应用运行。
注意:此代码是为2.x兼容性编写的。如果您正在使用版本3或更高版本进行下载,请使用下载管理器,而不要编写自己的下载服务。
取决于服务类型。取决于您的启动参数。有些会通过电话关机/开机或重新开机。定时器服务将需要由您的应用程序重新启动(需要注册以启动通知才能完成此操作)。如果您需要注册唤醒并处理广播,则您的服务将保持过去应用程序销毁的状态。另外,请小心应用程序服务的上一个结尾。你真的可以用这种方式阻塞某人的电话。真的,真的是彻底地测试它们。 – 2012-07-20 19:30:39
有没有办法检测服务是否已经启动并运行?我想从一个活动中检测到,如果它尚未启动,它将启动此服务。 – giga 2012-07-21 03:46:43