Android内存优化12 内存泄漏常见情况3 注册持久化

我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述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方法里注销监听器。




    推荐阅读