Android5.0L下因sensorservice crash导致systemserver重启的另外一种场景分析
2015-07-03 16:13
811 查看
一、出问题的场景
1、Sensorservice线程正在处理compass sensor事件的过程中,检查了一次buffer的指针的有效性,并在稍后会传递到AKM获取数据的函数接口中使用
2、Sensorservice线程所在进程的负责跨进程通信的Binder线程在sensorservice线程检查buffer指针之后没有真正使用之前,
收到了disable compass sensor的请求,从log中可以看到compass sensor先是被disable,disable的同时会free上面sensorservice检查过并正在使用的buffer指针,同时置空buffer指针
3、紧接着sensorservice线程继续执行AKM获取数据的函数接口,并使用到了已经被disable置空的buffer指针,然后产生异常
二、具体log和代码
Disable compass sensor并free buffer的代码:
Free buffer 3ms之后sensorservice马上因为访问空指针异常的log:
传递buffer指针并使用的代码:
使用buffer指针产生异常的地方log:
1、Sensorservice线程正在处理compass sensor事件的过程中,检查了一次buffer的指针的有效性,并在稍后会传递到AKM获取数据的函数接口中使用
2、Sensorservice线程所在进程的负责跨进程通信的Binder线程在sensorservice线程检查buffer指针之后没有真正使用之前,
收到了disable compass sensor的请求,从log中可以看到compass sensor先是被disable,disable的同时会free上面sensorservice检查过并正在使用的buffer指针,同时置空buffer指针
3、紧接着sensorservice线程继续执行AKM获取数据的函数接口,并使用到了已经被disable置空的buffer指针,然后产生异常
二、具体log和代码
Disable compass sensor并free buffer的代码:
Free buffer 3ms之后sensorservice马上因为访问空指针异常的log:
传递buffer指针并使用的代码:
使用buffer指针产生异常的地方log:
相关文章推荐
- Android 抓包使用
- AndroidManifest.xml——meta-data
- android: listview组件的应用-模拟微博
- Android gitHub 开源
- android View 详解
- Android中的加密技术
- Android开发(十一)——ImageView的尺寸设置scaleType
- Android开发(十)——像素单位dp、px、pt、sp的比较
- Android开发(九)——ViewFlipper实现图片轮播
- Android开发(八)——Android组件
- Android开发(六)——组件颜色Selector(Selector与Shape的基本用法 )
- Android repository 下载地址
- Viewpager实现图片轮播,广告轮播
- Android开发(五)——计时器
- Android开发(四)——Android中的颜色
- Android开发(三)——Android布局中实现圆角边框
- Android开发(二)——自定义圆形控件的使用CircleImageView
- Android开发(一)——全屏或者取消标题栏
- 【Android 开发教程】动态添加Fragments
- android自动登入