当前位置:操作系统 > 安卓/Android >>

解决Android中Can't create handle inside thread问题

 

new Thread() 

    public void run() 

    { 

             ..... 

     } 

}.start(); 

 

如果在上述代码中省略号处面创建一个Dialog的话会出现Can't create handle inside thread这样的错误,所以改用下述message形式的,下述是一个开发项目中具体的例子。

 

private void showStatusDialogThread() { 

        mHandler = new Handler() { 

            @Override 

            public void handleMessage(Message msg) { 

                if (status != null) { 

                    if (status.equals(SyncStatus.Success)) { 

                        // 更新本地保存的lastSyncTime为当前时间 

                        UpdateLocalLastSyncTime(System.currentTimeMillis()); 

                    } 

                    showStatusDialog(status); 

                    mHandler.removeCallbacks(mRunnable); 

                } 

                super.handleMessage(msg); 

            } 

        }; 

        mRunnable = new Runnable() { 

            @Override 

            public void run() { 

                mHandler.postDelayed(this, 100); 

                Message message = new Message(); 

                mHandler.sendMessage(message); 

            } 

        }; 

        mHandler.post(mRunnable); 

    } 

 

其中

 

showStatusDialog(status); 

是调用一个显示Dialog的自定义的方法。

这种发送message的方式模型抽取出来就是下面的形式:

 

        mHandler = new Handler() { 

            @Override 

            public void handleMessage(Message msg) { 

                //执行的具体方法,例如创建Dialog,计数等 

                                ...... 

                super.handleMessage(msg); 

            } 

        }; 

        mRunnable = new Runnable() { 

            @Override 

            public void run() { 

                //设置延迟时间间隔 

                mHandler.postDelayed(this, 100); 

                Message message = new Message(); 

                mHandler.sendMessage(message); 

            } 

        }; 

        mHandler.post(mRunnable); 

    } 

 

 

 

然后在其他某处调用

 

mHandler.removeCallbacks(mRunnable); 

 

就可取消此message的发送。

其实这里发送message也是一种线程,相当于设置一个定时器,每隔一段时间执行某些代码一样。

摘自: cangkukuaimanle的专栏

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,