PS:在使用Runnable时,可能会内存泄露。Runnable是一个匿名内部类,因此它对当前Activity有一个隐式引用。如果Activity在销毁之前,任务还未完成, 那么将导致Activity的内存资源无法回收,造成内存泄漏。那么该怎么解决这种问题呢?代码如下,
static class MyRunnable implements Runnable {
@Override
public void run() {
//执行任务
}
}
使用 静态内部类,避免了Activity的内存资源泄漏。
1、Runnable对象
Runnable runnable = new Runnable() {
@Override
public 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);
}
@Override
public 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;
}
}
}