我在Thread中运行了一个代码。我试图使用处理程序来接收来自线程的消息,以便我可以更新UI。不幸的是,消息没有发送给处理程序。
这是我在Thread
的run方法中的代码片段 ChromaticLayout chromatic = new ChromaticLayout(mPartition, mDeviceWidth, mDeviceHeight, mData);
chromatic.execute(new ChromaticLayout.LayoutCallback() {
@Override
public synchronized void retrieveResult(Object[][] data) {
// TODO Auto-generated method stub
mPhotoData.clear();
Log.w("CALLBACK", "start");
for (int i=0; i<data.length; i++)
{
PhotoFrameData[] row = new PhotoFrameData[data[i].length];
for (int j=0; j<data[i].length; j++) {
if (j==0)
Log.w("CALLBACK", "Width = " + ((PhotoFrameData) data[i][j]).getRectangle().width() + " height = " + ((PhotoFrameData) data[i][j]).getRectangle().height() );
row[j] = (PhotoFrameData) data[i][j];
}
mPhotoData.add(row);
}
Log.w("CALLBACK", "end");
PhotoFrameAdapter.this.handle.post(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
PhotoFrameAdapter.this.handle.sendEmptyMessage(1);
} });
//if (!PhotoFrameAdapter.this.handle.sendEmptyMessage(1))
// Log.w("CALLBACK", "Handle not working");
}});
}
是处理程序的接收消息:
protected Handler handle = new Handler() {
public void handleMessage(Bundle message) {
//PhotoFrameAdapter.this.notifyDataSetChanged();
mListener.dataLoaded(this);
}
};
是什么让它不添加到消息队列并调用handleMessage?感谢
答案 0 :(得分:2)
试试这个:
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
//do staff
break;
}
};
};
答案 1 :(得分:1)
您可以使用Handler的另一种方法如下(在许多情况下它可能是一个更简单的实现):
在UI线程上定义hander:
private Handler mHandler = new Handler();
然后从您的后台线程发布一个Runnable
,其中包含您要运行的代码:
mHandler.post(new Runnable() {
@Override
public void run() {
// Code to run here
}
});