我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述Android内存优化12 内存泄漏常见情况3 注册持久化相关的知识,希望能为你提供帮助。
android 中有很多注册和反注册,由于在注册后,自身会被持久化的观察者列表所持有,如果不进行反注册,就会造成内存泄漏
内存泄漏1:Sensor Manager
代码如下:
MainActivity.java
void registerListener() {
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ALL);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}View smButton = findViewById(R.id.sm_button);
smButton.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
registerListener();
nextActivity();
}
});
为什么?
通过Context调用getSystemService获取系统服务,这些服务运行在他们自己的进程执行一系列后台工作或者提供和硬件交互的接口,如果Context对象需要在一个Service内部事件发生时随时收到通知,则需要把自己作为一个监听器注册进去,这样服务就会持有一个Activity,如果开发者忘记了在Activity被销毁前注销这个监听器,这样就导致内存泄漏。
【Android内存优化12 内存泄漏常见情况3 注册持久化】怎么解决?
在onDestroy方法里注销监听器。
推荐阅读
- Android内存优化11 内存泄漏常见情况2 线程持久化
- What is Web Application Architecture? How It Works, Trends, Best Practices and More
- 彻底理解 Android 中的阴影
- [Android FrameWork 6.0源码学习] View的重绘ViewRootImpl的setView方法
- Android 音视频深入 十四FFmpeg与OpenSL ES 播放mp3音乐,能暂停(附源码
- Android内存优化1 了解Android是如何管理App内存
- RobotFramework(App滑动屏幕)
- Android时间轴效果,直接使用在你的项目中
- Android项目实战(四十一)(游戏和视频类型应用 状态栏沉浸式效果)