Service
启动方式:
-
startService
只是启动Service,启动它的组件和Service并没有直接关系,只有当service自身调stopSelf或者其他组件调用stopService服务才会中止。
-
bindService
其他组件可以通过回调获取Service的代理对象和Service交互,且这两方也进行了绑定,当启动方被销毁了,Service也会自动进入unBind操作.当发现所有绑定都进行了unBind时才会销毁service。
注意点:
- Service的onCreate是在主线程(ActivityThread)调用的,耗时操作会阻塞UI。
- 避免在 Service#onStartCommand()/onBind()方法中执行耗时操作。
- Service 需要以多线程来并发处理多个启动请求,建议使用 IntentService, 可避免各种复杂的设置。
BroadcastReceiver
启动方式:
静态/动态两种方式
注意点:
- 避免在 BroadcastReceiver#onReceive()中执行耗时操作,如果有耗时工作, 应该创建 IntentService 完成,而不应该在 BroadcastReceiver 内创建子线程去做。
- 避免使用隐式 Intent 广播敏感信息,信息可能被其他注册了对应 BroadcastReceiver 的 App 接收。可以使用LocalBroadcastManager。
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
网友评论