内存泄漏及解决方法

来源:互联网 发布:老徐外设店淘宝 编辑:程序博客网 时间:2024/04/27 19:52

在Activity销毁的时候取消正在运行的AsyncTask

public class MainActivity extends Activity {    private AsyncTask mAsyncTask;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mAsyncTask = new AsyncTask() {            @Override            protected Object doInBackground(Object[] objects) {                while (true){                    if(isCancelled()){                        break;                    }                }                return null;            }        };        mAsyncTask.execute();    }    @Override    protected void onDestroy() {        super.onDestroy();        if(null != mAsyncTask && !mAsyncTask.isCancelled()){            mAsyncTask.cancel(true);        }        mAsyncTask = null;    }}

Handler

public class MainActivity extends Activity {    private Handler mHandler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mHandler = new MyHandler(new WeakReference<Activity>(this));        mHandler.sendEmptyMessageDelayed(0,1000);    }    public static class MyHandler extends Handler{        private WeakReference<Activity> mActivity;        public MyHandler(WeakReference<Activity> activityWeakReference){            mActivity = activityWeakReference;        }        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if(null != mActivity){                Activity activity = mActivity.get();                if(null != activity && !activity.isFinishing()){                    //TODO do something...                }            }        }    }}public class MainActivity extends Activity {    private Handler mHandler = new Handler();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mHandler.postDelayed(new Runnable() {            @Override            public void run() {            }        },1000);    }    @Override    protected void onDestroy() {        super.onDestroy();        mHandler.removeCallbacksAndMessages(null);    }}

Thread

public class MainActivity extends Activity {    private Thread mThread;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mThread = new Thread(){            @Override            public void run() {                super.run();                while (true){                }            }        };        mThread.start();    }}@Override    protected void onDestroy() {        super.onDestroy();        if(null != mThread){            mThread.interrupt();        }    }