2
在处理程序,我们可以从后台线程传递一些数据到UI线程这样的:使用Handler将数据从bg线程传递到UI线程?
private void someBackgroundThreadOperation() {
final String data = "hello";
handler.post(new Runnable() {
public void run() {
Log.d(TAG, "Message from bg thread: " + data);
}
}
}
如果我们用上面的,我们不能再使用Handler.removeCallbacks(Runnable的R),因为我们赢了”没有引用我们上面创建的任何匿名runnables。
我们可以创建一个Runnable的实例,并张贴到处理程序,但它不会让我们通过传递任何数据:
private void someBackgroundThreadOperation() {
String data = "hello";
handler.post(mRunnable); // can't pass 'data' through.
}
private Runnable mRunnable = new Runnable() {
public void run() {
Log.d(TAG, "What data?");
}
}
我们可以使用,无论在Handler.removeCallbacks(mRunnable)方法,那么,因为我们有一个参考。
我知道我可以自己设置一些同步以获得第二种方法,但我想知道Handler是否提供了将数据传递给单个引用的Runnable的任何实用程序,几乎就像上面的示例中那样?
我能想到从浏览文档的最接近的是使用类似:
private void someUiThreadSetup() {
mHandler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
String data = (String)msg.obj;
return false;
}
});
}
private void someBackgroundThreadOperation() {
String data = "please work";
Message msg = mHandler.obtain(0, data);
mHandler.sendMessage(msg);
}
private void cleanup() {
mHandler.removeMessages(0);
}
这是做的正确方法?
感谢
我多次使用(String data =(String)msg.obj;) – 2010-10-13 16:45:20