Service和BroadcastReceiver总结
来源:互联网 发布:html a 调用js 编辑:程序博客网 时间:2024/05/14 05:42
Service
1、service的隐式启动和显示启动( 如果在同一个包中。两者都可以用。在不同包时。只能用隐式启动)
隐式启动
<service android:name=".service">
<intent-filer>
<action android:name="com.android.service"/>
<intent-filer>
</service>
final Intent serviceIntent=new Intent();
serviceIntent.setAction("com.android.service");
显示启动
final Intent serviceIntent=new Intent(this,service.class);
startService(serviceIntent);
2、activity对service的调用:startService()和bindService()
两者生命周期的区别
1)startService()方法
这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。 当service被停止时,系统会销毁它。多次调用startService(),只会调用1次onCreate(),但会多次调用onStartCommand()方法。
2)bindService()方法
客户可以通过一个IBinder接口和service进行通信。 客户可以通过 unbindService()方法来关闭这种连接。一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。
IBinder对象相当于Service组件中的内部钩子,可以访问Service内部数据,Activity通过IBinder类和Service通信。在实际开发中,通常在Service中定义一个Binder的子类。
bindService(Intent service, ServiceConnection conn, int flags),启动Service。ServiceConnection类,用于监听访问者和Service之间的链接情况。当activity和service链接成功后回调ServiceConnection对象的onServiceConnected方法,可在该方法中获取IBinder对象。
多次调用 bindService(),只会调用1次onCreate()和onBind()方法。
3)IntentService的使用
Service不是一条新线程,不应该在其中处理耗时任务。Service不会启动一个单独的线程,它与所在应用处于同一个进程中。
intentservice是Service的子类,只需要实现onHandleIntent()方法
BroadcastReceiver
BroadcastReceiver是一个系统级的全局监听器,能够实现不同组件之间的通信。在实现BroadcastReceiver时,主要实现其中的onReceiver()方法,但是不能执行耗时操作。
1、使用步奏
1)注册BroadcastReceiver,代码注册或者xml注册
2)创建Intent,用于启动BroadCastReceiver
3)调用指定BroadcastReceiver:Context的sendBroadcast()或者sendOrderedBroadcast
2、注册
1)代码注册(适合将BroadcastReceiver作为内部类使用)
IntentFilter filter=new IntentFilter("android.provider.xxx");//intent过滤器
MyReceiver receiver=new MyReveiver();//Receiver对象
registerReceiver(receiver,filter);//注册//unregisterReceiver(receiver);//取消注册
2)AndroidManifest.xml注册(适合将BroadcastReceiver单独的类)
<intent-filter>
<action android:name="com.simware.BroadcastReceiverDemo" >
</action>
</intent-filter>
3、普通广播和有序广播
1)普通广播(Normal Broadcast):系统异步发送广播,同一时刻可以被所有接受者受到,效率高,但接受者不能将处理结果传递给下一个接受者。通过Context的sendBroadcast()发送普通广播
2)有序广播(Ordered Broadcast):接受者将按照实现规定的优先级依次接收Broadcast。接收者可以终止Broadcast Intent的传播,低优先级的接收者将不会受到广播。同时接受者可以将数据传递给下一个接受者:setResultExtras(Bundle)来存放数据和getResultExtras(true)来接收上级广播的数据;通过Context的sendOrderedBroadcast()发送普通广播
<intent-filter android:priority="20">
<action android:name="com.simware.BroadcastReceiverDemo" >
</action>
</intent-filter>
Service和Activity的通信方式
1、bindService()启动service,通过内部钩子IBinder对象实现两者的沟通
2、startService()启动service,借助BroadcastReceiver来实现数据通信,此时最好将Receiver定义为Activity的内部类,这样Receiver可以直接操控activity的数据。
0 0
- Service和BroadcastReceiver总结
- 理解Service和BroadcastReceiver
- 关于Service和BroadcastReceiver
- Service和BroadcastReceiver
- android--service和broadcastReceiver基础
- 浅谈android Service和BroadCastReceiver
- 四大组件Activity、Service、BroadcastReceiver、ContentProvider总结
- BroadcastReceiver service
- 关于BroadcastReceiver 和 Service的那些事
- Android入门之Service和BroadcastReceiver
- Activity和Service通信 使用BroadcastReceiver
- Android笔记----Service应用和BroadcastReceiver组件
- 综合运用BroadcastReceiver和Service模拟下载
- Service 和 BroadcastReceiver下载播放视频
- Android面试(三)BroadCastReceiver和Service
- 【总结备用】Android监听网络状态实现(BroadcastReceiver + Service)
- 在service和BroadCastReceiver中 启动activity和alertdialog
- Android -- BroadcastReceiver的使用和总结
- Struts2+ExtJS+Ajax 登录操作例子
- FIRST BLOOD
- [leetcode] Remove Duplicates from Sorted Array
- 四种点击事件
- RDIFramework.NET V2.9版本 WinFom部分新增与修正的功能
- Service和BroadcastReceiver总结
- sqlplus中导出数据到excel中
- python动态加载是否影响性能
- 搜狗日志处理程序
- 客户管理系统之模块设计(九)
- mysql命令大全
- 5.6哈夫曼编码的设计与实现
- revit高效调试
- 如何使用优山美地照片中的图片文件