Android 是否重新启动已运行的服务?

Android 是否重新启动已运行的服务?,android,service,ipc,broadcastreceiver,Android,Service,Ipc,Broadcastreceiver,我添加了一个名为PACKAGE\u的广播接收器,另一个名为BOOT\u的广播接收器已完成。bootcompled广播接收器启动我的服务。安装新应用程序后,我想向我的服务发送一条消息。我想到的第一个解决方案是使用 intent.setAction("NEW_APP_INSTALLED"); startService(intent); 在不停止服务的情况下,检查service.onStart()方法中的intent.getAction()值。如果结果是NEW\u APP\u INSTALLED,

我添加了一个名为
PACKAGE\u的广播接收器,另一个名为
BOOT\u的广播接收器已完成
bootcompled
广播接收器启动我的服务。安装新应用程序后,我想向我的服务发送一条消息。我想到的第一个解决方案是使用

intent.setAction("NEW_APP_INSTALLED"); 
startService(intent);
在不停止服务的情况下,检查
service.onStart()
方法中的
intent.getAction()
值。如果结果是
NEW\u APP\u INSTALLED
,则调用
newAppInstalled()
。我认为这不是一个优雅的解决方案

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

一次又一次地启动服务有问题吗

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

在已经运行的服务上调用
startService
,这对您来说是非常好的。你可以按照你建议的方式来做,或者有两个不同的服务(一个用于启动,一个用于新的应用程序),或者你可以在服务启动后在服务中注册一个
BroadcastReceiver
,但这并不有效,因为如果你试图向它发送一条消息,而它还没有运行,它就不会收到消息。。我更喜欢您建议的一种服务,并使用
startService

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

我对艾德尔一无所知,真的。也许会有帮助。该页面确实声明“大多数应用程序不应使用AIDL创建绑定服务”。这是因为它需要多线程,并且使其更加复杂


如果我未能回答您满意的问题,请告诉我-尽管我无法具体阐述AIDL,因为我对它一无所知。

您有一个启动服务的广播接收器。您的服务可以侦听添加的包。\u。所以您说重新启动正在运行的服务是可以的。这不是终止服务并重新启动,对吗?这是非常重要的。如果不是它的工作原理,则一次又一次地启动服务。第三种方法是,您建议注册包_的广播接收器,以代码方式添加。我的意思是,非AndroidManifest可能是一个很好的解决方案,因为我只想在我的服务运行时捕获包_添加的广播,因此,如果我的服务未运行,这并不重要为了捕捉软件包,您为我添加了广播。有什么建议吗?如果您在服务运行时调用
startService
,它只会将新的意图传递给
服务
,并调用
onStartCommand
。如果您对正在运行的服务调用
startService
,它不会终止该服务。要捕获添加的
PACKAGE\u
,您可以
在服务的
onCreate中注册Receiver(…)
。也就是说,你不需要把它放在你的舱单上。