background image

由于我们的线程是 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/