Binder的非正常消亡时的重置方法
一、原理
当Binder非正常消亡的时候,会导致远程调用失败,这样客户端功能就会受到影响。
解决:给Binder设置一个死亡代理,当Binder死亡时,我们就会收到通知,这个时候可以重新发起连接。
二、制作
1、前期准备
客户端:MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); createService();
}
/*连接Service端,获取mIBookManger*/
private void createService(){
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//初始化mIBookManger
mIBookManager = IBookManager.Stub.asInterface(service);
} @Override
public void onServiceDisconnected(ComponentName name) { }
};
Intent intent = new Intent(this,BookService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
}
Service端:BookService.java
2、使用
创建IBinder.DeathRecipient接口,重写其中的binderDied(),当Binder死亡时候,回调该方法。
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
@Override
public void binderDied() {
if (mIBookManager != null){
//解除绑定当前接口
mIBookManager.asBinder().unlinkToDeath(mDeathRecipient,0);
}
mIBookManager = null;
createService();
}
};
当然解除绑定,之前还需要绑定接口
/*连接Service端,获取mIBookManger*/
private void createService(){
...(连接之前的代码)
try {
//绑定接口,等待回调
mIBookManager.asBinder().linkToDeath(mDeathRecipient,0);
} catch (RemoteException e) {
e.printStackTrace();
}
}
Binder的非正常消亡时的重置方法的更多相关文章
- DedeCms织梦后台管理员密码修改和忘记重置方法
方法/步骤 打开dede_admin数据表: 进入你的MYSQL后台,然后在你的数据库名中,找到dede_admin这项如图,pwd下的值就是你的密码,织梦密码采取的是MD5加密,破解麻烦而且没有必要 ...
- centos系统mysql数据库忘记密码重置方法(ERROR 1045 28000 Access denied...)
当mysql的密码错误的时候,就会报如下这样的错误信息 解决方法如下: 首先输入mysqld_safe --skip-grant-tables 然后停止mysql服务,输入service mysqld ...
- Mysql(Linux服务器)root用户密码忘记重置方法
MySQL是非常常见的开源数据库,使用者众多,若是不小心忘记了安装在服务器的mysql密码,无法登陆,应该如何重置呢?方法很简单,现在和大家分享下.(系统环境:CentOs 6.5 软件:Mysql ...
- MySQL5.7初始化后5种密码重置方法
前言:由于好几次安装MySQL5.7后一直被重置密码所困扰,因此特意整理重置的方法 安装MySQL5.7 [root@node1 db]# ll 以下的rpm安装包可以随处下载 total 40235 ...
- ubuntu下MySQL忘记密码重置方法
方法一: 1):编辑mysqld.cnf文件 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 2):在文件中的skip-external-locking一行的下面 ...
- pymysql_mysql密码重置方法,连接局域网数据库的解决办法
https://blog.csdn.net/qq_37176126/article/details/72824106 pymysql模块的操作 https://blog.csdn.net/skh2 ...
- MySQL密码重置方法
MySQL数据库的安装和配置,配置Mysql按照bin目录到Path中 使用命令行窗口连接MYSQL数据库:mysql –u用户名 –p密码 对于密码的重置有以下两种方法(卸载重新安装当然也可以): ...
- Linux用户密码重置方法
方法一: 启动时,随便按一个键,空格即可(不能是回车),让其停留在如下界面 按e编辑 在UTF-8后面添加init=/bin/sh init=/bin/sh 根据上面提示,按Ctrl+x启动得下图 输 ...
- MAC MYSQ忘记密码重置方法
网友的方法,记个笔记请勿转载. step1: 关闭mysql服务: 苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) ...
随机推荐
- SQL case when
jack 1tom 2anni 3poly 4 select buyer_name, ( case ' then '东' ' then '南' ' then '西' ' the ...
- 利用monkeyrunner实现Android屏幕连续截图
MonkeyRunner 什么是monkeyrunner monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器.通过monke ...
- linux学习笔记之线程
线程同步机制:http://www.cnblogs.com/zheng39562/p/4270019.html 一.基础知识 1:基础知识. 1,线程需要的信息有:线程ID,寄存器,栈,调度优先级和策 ...
- 自动化高效css开发,畅谈less的灵活变化
css是一种让html与样式分离解析而出现的代码,它的出现大大提高了程序员的工作效率,和后期进行维护的效率.但是发展至今,由于起死板单调的写法,越来越不能满足程序员们灵活的思维,很多时候是种恨铁不成钢 ...
- JavaScript实现私有属性
原文:JavaScript实现私有属性 JavaScript被很多人认为并不是一种面向对象语言,原因有很多种,比如JavaScript没有类,不能提供传统的类式继承:再比如JavaScript不能实现 ...
- Dependency Walker使用说明
Dependency Walker使用说明 标签: dllexewindowsvbqq工具 2010-03-29 11:10 25175人阅读 评论(22) 收藏 举报 分类: 基本常识(45) ...
- 善待Redis里的数据--Unable to validate object
又是一篇关于姿势的文章,为什么是”又”呢?因为上个星期刚写完一篇关于Apache Commons Pool的正确使用姿势的文章,点击此处阅读. Redis为我们提供便利的同时,我们也要善待里面的数据 ...
- 跨越多台haproxy 跳转
<pre name="code" class="python">在zjtest5环境的haproxy上配置: 需要 访问acl host_zjcap ...
- 纯CSS美化的checkbox 和 radio
html <!DOCTYPE HTML> <html> <head> <title>纯CSS3实现自定义美化复选框和单选框</title> ...
- JavaEE Tutorials (25) - 使用Java EE拦截器
25.1拦截器概述380 25.1.1拦截器类381 25.1.2拦截器生命周期381 25.1.3拦截器和CDI38125.2使用拦截器381 25.2.1拦截方法调用382 25.2.2拦截生命周 ...