Do I even need a service?
这取决于.如果您在BraodcastReceiver中所做的工作不需要花费太多时间,那么您可以在那里完成.但是,如果你的onReceive()运行时间太长,那么Android会杀掉它.通常,您不应在BroadcastReceiver中执行网络I / O.因此,您可以使用BroadcastReceiver来启动您的服务,它可以完成真正的工作.
Is my design backwards? Should the Broadcast Receiver call the service
to do the work?
看我对第一个问题的回答(上)
Can you register the broadcast receiver in the manifest and not have
to call it at all in code?
是的,您可以添加< intent-filter>标记到< receiver>清单中的标签.每当广播适当的Intent时,这将自动启动BroadcastReceiver.您的应用程序无需运行即可实现此目的.像这样的东西:
android:name=".MyReceiver" >
Are multiple calls to startService() bad? I know only 1 service runs,
but how do I check if the service is already running before creating
it?
多次调用startService()都可以.如果它已经启动,它将不会启动另一个.每次调用startService()都会在服务中生成对onStartCommand()的调用.如果要查看它是否已在运行,可以使用BroadcastReceiver中的peekService().如果IBinder正在运行,它将返回IBinder,但如果它尚未运行则不会启动它.