PS:在使用Runnable时,可能会内存泄露。Runnable是一个匿名内部类,因此它对当前Activity有一个隐式引用。如果Activity在销毁之前,任务还未完成, 那么将导致Activity的内存资源无法回收,造成内存泄漏。那么该怎么解决这种问题呢?代码如下,
static class MyRunnable implements Runnable {
@Override
public void run() {
//执行任务
}
}
使用 静态内部类,避免了Activity的内存资源泄漏。
1、Runnable对象
Runnable runnable = new Runnable() {@Overridepublic void run() {Log.i("Lgq","runnable111"+Thread.currentThread().getName());textView.setText("aaaaaaaaaaa");}
};
2、Handler调用Runnable对象
Handler handler =new Handler();
handler.post(runnable);
03-22 15:21:49.950 9126-9126/com.tianxin.httpheader I/Lgq: runnable111main
3、Thread调用Runnable对象
Thread thread = new Thread(runnable,"abcc");
thread.start();
03-22 15:21:49.936 9126-9222/com.tianxin.httpheader I/Lgq: runnable111abcc
4、handler构造方法弱引用实现
private Handler mHandler;
mHandler = new InnerHandler(this);
private static class InnerHandler extends Handler {private WeakReference<DetectActivity> mWeakReference;public InnerHandler(DetectActivity activity) {super();this.mWeakReference = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {if (mWeakReference == null || mWeakReference.get() == null) {return;}DetectActivity activity = mWeakReference.get();if (activity == null) {return;}if (msg == null) {return;}switch (msg.what) {case MSG_INITVIEW:activity.start();break;default:break;}}
}