【问题标题】:Handler on android not receiving the messageandroid上的处理程序没有收到消息
【发布时间】:2014-09-24 07:02:39
【问题描述】:

我有一个代码在线程内运行。我尝试使用处理程序从线程接收消息,以便更新 UI。不幸的是,消息没有发送到处理程序。

这是我在线程的run方法中的代码sn-p

                    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?谢谢

【问题讨论】:

    标签: android multithreading user-interface handler


    【解决方案1】:

    试试这个:

    private Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case 1:
                    //do staff
                    break;
                }
            };
        };
    

    【讨论】:

      【解决方案2】:

      您可以使用 Handler 的另一种方式如下(在许多情况下它可能是更简单的实现):

      在 UI 线程上定义处理程序:

      private Handler mHandler = new Handler();
      

      然后从您的后台线程中发布一个Runnable,其中包含您要运行的代码:

      mHandler.post(new Runnable() {
          @Override
          public void run() {
              // Code to run here
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 2015-12-17
        • 2021-03-23
        相关资源
        最近更新 更多