由于我们的线程是 Activity 的内部类,所以 MyThread 中保存了 Activity 的一个引用,当
MyThread 的 run 函数没有结束时,MyThread 是不会被销毁的,因此它所引用的老的
Activity
也不会被销毁,因此就出现了内存泄露的问题。
这种线程导致的内存泄露问题应该如何解决呢?
第一、将线程的内部类,改为静态内部类。
第二、在线程内部采用弱引用保存 Context
引用。
另外,我们都知道 Hanlder 是线程与 Activity 通信的桥梁,我们在开发好多应用中会用到
线程,有些人处理不当,会导致当程序结束时,线程并没有被销毁,而是一直在后台运
行着,当我们重新启动应用时,又会重新启动一个线程,周而复始,你启动应用次数越
多,开启的线程数就越多,你的机器就会变得越慢。
19 package com.tutor.thread;
20 import android.app.Activity;
21 import android.os.Bundle;
22 import android.os.Handler;
23 import android.util.Log;
24 public class ThreadDemo extends Activity {
25
private static final String TAG = "ThreadDemo";
26
private int count = 0;
27
private Handler mHandler = new Handler();
28
29
private Runnable mRunnable = new Runnable() {
30
31
public void run() {
32
//
为了方便 查看,我们用 Log
打印出来
33
Log.e(TAG, Thread.currentThread().getName() + " " +count);
34
count++;
35
setTitle("" +count);
36
//每 2
秒执行一次
37
mHandler.postDelayed(mRunnable, 2000);
38
}
找软件资料,就到一览软件文库
http://wk.yl1001.com/rj/