Android UI更新的几种方法

前言


在android开发中,界面UI的更新都是在主线程来完成的。线程分为主线程(Main Thread,简称MT)和工作线程(Work Thread,简称WT),我们通常会在WT中执行一些比较耗时的操作,比如下载,网络,缓存等,然后在将结果发送给MT进行UI的更新操作。如果是在WT进行UI的更新,则会抛出异常,android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.(只有创建这个View的原始线程才能修改这个view)。
在BT搜索、WIFI搜索、其他需要更新View的UI过程中,很多是采用广播的方式通知搜索的结果,实时的显示到listview中进行UI的更新操作。通常会使用以下几种方式进行UI的更新:handler,runOnUiThread,子线程发送Message。


一、Activity.runOnUiThread


利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新 ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。

mActivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        Log.e(TAG, "开始添加设备!");
        addDevice(device);
    }
});

二、handler.post(Runnable)


handler.post(new Runnable() {
    @Override
    public void run() {
        addDevice(device);
    }
});

三、子线程发送Message


首先在需要执行更新的位置添加以下代码

new Thread(new Runnable() {
    @Override
    public void run() {
        //Message msg = new Message();
        //msg.what = 0x06;
        //handler.sendMessage(msg);
        handler.sendEmptyMessage(0x06);
    }
}).start();

然后进入handler下进行处理

final Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
                case 0x06:
                   addDevice(device);
                break;
            default:
                break;
        }
        super.handleMessage(msg);
    }
};

以上三种方法都可以实现UI的更新,掌握哪种方式取决于代码中的叠加度,不过个人推荐使用方法一

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,277评论 25 709
  • 作为IT新手,总以为只要有时间,有精力,什么东西都能做出来。这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就...
    AiPuff阅读 4,336评论 0 0
  • 接近黄昏,太阳懒懒的从西方发出柔和的光。咖啡店里人慢慢开始多起来,大部分人几个一桌,低声地谈笑着。 我看着那个女人...
    不覚阅读 3,555评论 4 6
  • A1通过矛盾来得到洞察 今天上午公司例行会议中,商品部与市场部因发货问题而起冲突。事情起因,我管辖区域门店在上周要...
    visllen阅读 1,183评论 0 0
  • 这个世界不允许有灵魂的人 ――袁雪芬 -1- “爸,您说会回来的,怎么一去好几年,到现在连音讯都没有,您在异乡客...
    姑娘简一阅读 5,303评论 5 13