Chr*_*nch 76 android android-service android-broadcast
我试图澄清Android中广播接收器和服务之间的区别.
我知道活动可以通过调用startService意图来启动服务.
广播接收器可以在代码或清单中注册,并可以使用sendBroadcast.
你什么时候使用一个与另一个?
我知道多个广播接收器可以监听相同的意图,而服务并非如此.
Sco*_*eld 106
无论用户在前台做什么(用户可以在活动之间切换),服务都意味着在后台执行一段时间的操作.一个很好的例子是音乐播放器服务 - 用户通过音乐播放器应用程序开始播放音乐,但当他们退出应用程序时,音乐继续播放.
服务对于跨多个应用程序提供/管理对资源的公共访问也很有用.这通常用于系统资源,例如传感器.
广播接收器旨在响应意图(通常是由服务或系统事件发送的意图),做某事并完成.这里的示例可能是用户将支持NFC的电话触摸到标签,系统为其创建意图,并且注册的接收器处理它以改变一些设置(改变音量,打开蓝牙等).
当通过sendBroadcast广播意图时,它将被发送到具有匹配意图过滤器的所有接收器.但是,请务必注意,在API26 +中,在此类情况下不再调用清单中注册的大多数接收器,有关详细信息,请参阅Google文档.
示例1:假设您要公开一个函数(可从任何想要使用它的应用程序获得),该函数要求网站计算与Kevin Bacon的分离度.
请注意,此示例是"执行某些操作并返回",而不是执行长时间运行的后台操作.
您可以通过多种方式实现此目的:
创建一个所有用户编译到其应用程序中的库项目.
创建一个广播接收器来处理每个请求.
创建一个服务来处理每个请求
示例2:您希望执行一些数据分析以查找数据中的某些模式
后台线程如果所有处理都应该在用户处于同一个应用程序和同一个Activity上时发生,那么后台线程(或管理后台线程的AsyncTask)将是一个很好的方法
服务如果您希望允许用户在执行处理时退出应用程序(并在稍后通知他们结果),或允许他们在执行处理时在同一应用程序中进行多个活动,则服务将是一个更好的方法
Vik*_*tel 73
广播接收器
在Android开发者博客上引用Dianne Hackborn:
处理广播时,应用程序将获得一组固定的时间(当前为10秒)来完成其工作.如果它在那段时间内没有完成,那么应用程序被认为是行为不端,并且如果需要,它的进程立即被抛入后台状态以便为内存被杀死.
广播接收器受最大时间限制(一般为10秒),必须完成.
服务
如果你的行动需要更长的时间(连接到互联网可能需要一些).更好的是在背景运行.你肯定应该从接收者或活动呼叫服务为此目的.它们最后被Android操作系统杀死.
结论:
一般来说,对应用程序很重要的所有工作(获取,解析,缓存,更新数据库)都应该移动到ServiceAndroid上.因为你几乎认为所有的社交网站都有STICKY_SERVICES那些麻烦的工作.
BroadcastReceiver主要用于启动服务.它通常取决于应用.ConnectivityManager无论何时网络是向上或向下,大多数应用程序都用于广播.在这些的帮助下Service开始BroadcastReceiver.
| 归档时间: |
|
| 查看次数: |
45778 次 |
| 最近记录: |