Android上的处理程序没有收到消息

时间:2014-09-23 22:52:00

标签: android multithreading user-interface handler

我在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?感谢

2 个答案:

答案 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
    }
});