内存泄漏:程序运行会用到内存,在退出程序的时候,占用内存的数据没有释放,那么当数据越来越多的时候,就会产生内存泄漏。
handler为什么会内存泄漏呢,handler是个内部类,内部类会持有外部类的引用,内部类需要依赖外部类。handler需要定义为静态类,当你推出Activity,handler还在工作,
下面是引起内存溢出的:Activity已经finish,但handler还在工作
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myhandler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("存在");
}
}, 1000*60*10);
finish();
}
private Handler myhandler=new Handler(){
public void handleMessage(android.os.Message msg) {
};
};
}
解决方法:用软引用并用静态内部类
/**
*
* @author Administrator 定义一个内部类时,会默认引用外部类对象的引用,当使用内部类时,使用static定义为静态内部类
* 引用:强引用(new) 软引用,弱引用
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler.postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("存在");
}
}, 1000 * 60 * 10);
finish();
}
private myhanler handler=new myhanler(this);
private static class myhanler extends Handler {
WeakReference<MainActivity> activity;
public myhanler(MainActivity main) {
activity = new WeakReference<MainActivity>(main);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if (activity.get()!= null) {
}
}
}
}