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();    }}
原创粉丝点击