2012-02-14 86 views
2

我有一个叫做PACKAGE_ADDED的广播接收器,还有一个叫做BOOT_COMPLETED的广播接收器。该bootcompleted广播接收器开始我service.When安装新的应用程序,我想发信息给我的服务,来到我的脑海。首先解决办法是用重新开始运行服务?

intent.setAction("NEW_APP_INSTALLED"); 
startService(intent); 

再次启动该服务不停止服务并检查service.onStart()方法中的intent.getAction()值。如果结果是NEW_APP_INSTALLED,请致电newAppInstalled()。我不认为这是一个优雅的解决方案。

重复启动服务有问题吗?当我的活动通过ipc(aidl)绑定到它时会发生什么情况,同时获取数据并且安装了新应用的广播接收器再次启动它?最后,解决我的问题的最佳方法是什么?

+0

您有一个启动服务的BOOT_COMPLETE广播接收器。您的服务可以侦听PACKAGE_ADDED。 – ciscogambo 2012-02-14 17:59:58

回答

2

一次又一次地启动服务的问题?

最后,解决我的问题的最佳方法是什么?

对于您在已经运行的服务上调用startService是完全正确的。您可以按照您建议的方式进行操作,也可以使用两种不同的服务(一种用于引导,一种用于new_app),或者您可以在服务启动后在服务中注册BroadcastReceiver,但这样做效果不佳,因为如果尝试发送一条消息,它并没有运行,它不会得到消息..我更喜欢一个服务,如你所建议和使用startService

当我的活动通过ipc(AIDL)获取数据 并且安装了新的应用程序的广播接收器再次启动它时会发生什么?

嗯,我真的对AIDL一无所知。 This可能会有所帮助。该页面显示“大多数应用程序不应该使用AIDL创建绑定服务”。这是因为它需要多线程并使其更加复杂。

请让我知道,如果我没有回答你的满意 - 虽然我不能真正详细说明AIDL,因为我不知道这件事。

+0

所以你说再次开始一个正在运行的服务是好的。它不是在查杀服务并重新开始吧?这是非常重要的,如果它不是如何起作用,一次又一次地开始服务。第三种方式,你建议在代码方式上注册PACKAGE_ADDED的广播接收器,我的意思不是AndroidManifest可能是我的好解决方案因为我只想捕捉PACKAGE_ADDED广播时,我的服务正在运行,所以如果我的服务没有运行,为我抓取PACKAGE_ADDED广播并不重要。任何建议? – dardanel 2012-02-15 09:54:37

+0

如果在服务运行时调用'startService',它只是将新的意图传递给'Service'并调用'onStartCommand'。如果您在正在运行的服务上调用'startService',它不会终止服务。 – Jakar 2012-02-22 03:38:00

+0

并且为了捕获'PACKAGE_ADDED',你可以在你的服务的'onCreate'中注册'registerReceiver(...)'。 I.E.你不需要把它放在清单中。 – Jakar 2012-02-22 03:39:22