Android_订购发布(eventbus)、双线程守护
来源:互联网 发布:公安部网络监察局官网 编辑:程序博客网 时间:2024/05/17 20:30
订购发布—-EventBus(轻量级的Android事件总线库)
使用场景:当我们在程序中触发了某一个模块的数据变化时,受我们自己的逻辑控制,需要其他程序模块产生对应的操作响应
1.子线程中数据变化,需要呈现到UI上—-handler
2.服务中有一个MediaPlayer在播放音乐,播放进度呈现到Notification上 —绑定服务
3.fragment上点击一个按钮,activity上一个edt文字就要变化 —传统fragment+activity解耦合通信
事件总线:订阅一系列的事件,发布一系列的事件,找到对所发布事件感兴趣的订阅者,执行对应操作
①、引入库
②、通过EventBus代替服务绑定
1、 创建布局
(谁获取或呈现值谁是订阅者、谁提供或修改值谁是发布者)
2、创建服务
}
A 为自定义动作类:
发布者通过EventBus.getDefault().post(‘action’),来发布动作
3、Acticity接收动作修改UI
①、接收动作
注意:
1)、参数必须要与发布者的动作类一直
2)、@Subscribe 修饰的此方法可在任意线程中执行,默认与发布者所在线程一致。UI的修改只能在主线程中,所以通过threadMode修改方法执行的线程
ThreadMode.POSTING:默认是在事件发布者所在的线程执行
ThreadMode.MAIN:主线程
ThreadMode.ASYNC:总会重新实例化一个新的子线,加入后台任务队列,使用线程池调用
ThreadMode.BACKGROUND:若当前线程非UI线程则在当前线程中执行,否则加入后台任务队列,使用线程池调用
②、注册订阅动作,并在程序销毁时解注册
③、启动服务
当程序退出,服务仍旧继续
双线程守护
意义在于程序不会轻易被360、一键优化等操作杀死
实现原理:在程序后台开启两个进程和服务,当前面一个进程和服务被杀死时,另一个服务和进程检测到并恢复和再启动杀死的服务、当后面的进程和服务被杀死时一样通过前一个恢复和启动
①、创建两个服务
②、主程序中启动服务
③、两个服务互相绑定
MainService中:
GuardService中:
③、在两个服务中互相检测(通过conn)
MainService中:
GuardService中:
④、开启两个进程
以上代码在手机中只能开启一个进程的两个服务,当杀死一个进程时两个服务均被杀死,所以我们需要开启两个进程,每个进程分别一个服务,这样杀死一个进程另一个便再次启动
在主配置xml中的一个服务内部加入process属性:
⑤、引入aidl,复制代码
1)引入
在project视图的main下
2)Build—>Make Project
3)在MainService与GuardService赋值代码
private class MyBinder extends IGuardInterface.Stub{ @Override public String getServiceTag() throws RemoteException { return this.getClass().getSimpleName(); }}
- Android_订购发布(eventbus)、双线程守护
- 发布 / 订阅的事件总线(eventBus)
- Java for Web学习笔记(八九):消息和集群(4)定制发布和订购
- hdu 2686 Matrix(双线程DP)
- 蓝桥杯 - 传纸条 (双线程DP)
- nyoj 61(双线程dp)
- HDU 2686 Matrix(双线程DP)
- android_网络判断,Greendao,retrofit,eventbus结合展示数据
- 建立双线服务器(双线游戏服务器)
- 双线程操作
- 省赛 双线程dp
- 双线程互相等待
- 双线程dp
- 新建双线 程
- Python双线程使用
- 双线程卖火车票
- 单双线程
- 双线程猜数字
- DSPF28335
- 如何理解FFT
- Unity_脚本和材质系统的结合使用_012
- PROCESS MEMORY AND MEMORY CORRUPTIONS
- 28335
- Android_订购发布(eventbus)、双线程守护
- win10 mysql 无法远程连接
- 2812
- as的用法总结
- Unity_脚本与寻路系统的结合使用_013
- spark-shell 启动报错, error: not found: value spark(低级已解决)
- mtd-utils工具的使用
- 计算2的1000次方
- 机器学习习题(7)