重新开始已经运行服务?

时间:2012-02-14 16:37:34

标签: android service ipc broadcastreceiver

我有一个名为PACKAGE_ADDED的广播接收器,另一个叫BOOT_COMPLETED的广播接收器。 bootcompleted广播接收器启动我的服务。当安装新应用程序时,我想向我的服务发送消息。我想到的第一个解决方案是再次启动服务

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

     

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

您可以在已经运行的服务上调用startService。您可以按照建议的方式执行此操作,也可以使用两种不同的服务(一种用于启动,一种用于new_app),或者您可以在服务启动后在服务中注册BroadcastReceiver,但这样做不会有效如果您尝试向其发送消息并且它尚未运行,则它将无法收到消息..我更喜欢您建议的一项服务并使用startService

  

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

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

如果我没有回答你的满意,请告诉我 - 虽然我不能特别详细说明AIDL,因为我对此一无所知。