Yar..
12
我个人使用自定义线程(扩展线程的类),但通过Message发送响应给UI线程.所以在线程的run()函数中有:
Message msg;
msg = Message.obtain();
msg.what = MSG_IMG_SET;
mExtHandler.sendMessage(msg);
UI线程定义了一个消息处理程序.
private Handler mImagesProgressHandler;
public void onCreate(Bundle bundle) {
mImagesProgressHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case LoadImagesThread.MSG_IMG_SET:
mArrayAdapter.setBitmapList(mImagesList);
mArrayAdapter.notifyDataSetChanged();
break;
case LoadImagesThread.MSG_ERROR:
break;
}
super.handleMessage(msg);
}
};
这实际上比AsyncTask更容易.
小心 - 这里是龙!这个内部Handler类具有对外部类'this的隐式引用.最好使Handler静态并将WeakReference带到外层. (2认同)
@MichaelKrause,为什么这里有问题?处理程序的生命周期不会超过活动的生命周期 (2认同)