3
}
以上的代码是很危险的,如果将 Activity 赋值到么 mContext 的话。那么即使该 Activity 已
经 onDestroy,但是由于仍有对象保存它的引用,因此该 Activity 依然不会被释放.
如何才能有效的避免这种引用的发生呢?
第一,应该尽量避免 static 成员变量引用资源耗费过多的实例,比如 Context
。
第二、Context 尽量使用 Application Context,因为 Application 的 Context 的生命周期比较长,
引用它不会出现内存泄露的问题。
第三、使用 WeakReference 代替强引用。比如可以使用 WeakReference mContextRef;
2.
线程惹的祸
线程也是造成内存泄露的一个重要的源头。线程产生内存泄露的主要原因在于线程生命周
期的不可控。我们来考虑下面一段代码。
4
public class MyActivity extends Activity {
5
@Override
6
public void onCreate(Bundle savedInstanceState) {
7
super.onCreate(savedInstanceState);
8
setContentView(R.layout.main);
9
new MyThread().start();
10 }
11 private class MyThread extends Thread{
12 @Override
13
public void run() {
14
super.run();
15
//do somthing
16 }
17 }
18 }
这段代码很平常也很简单,是我们经常使用的形式。我们思考一个问题:假设 MyThread
的 run
函数是一个很费时的操作,当我们开启该线程后,将设备的横 屏变为了竖屏,一
般情况下当屏幕转换时会重新创建 Activity,按照我们的想法,老的 Activity 应该会被销
毁才对,然而事实上并非如此。
找软件资料,就到一览软件文库
http://wk.yl1001.com/rj/