关于Android在非UI线程更新UI的问题。

为了解决在Android非UI线程更新UI这个问题,Android提供了一些方法,从其他线程访问UI线程。

  1. Activity.runOnUiThread(Runnable)
  2. View.post(Runnable)
  3. View.postDelayed(Runnable, long)
  4. Looper的方式。
  5. 使用Handler的方式。
// 1. 使用runOnUiThread的方式
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
    }
});

// 2. 使用post的方式
btn.post(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
    }
});

// 3. 使用postDelayed的方式
btn.postDelayed(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
    }
}, 1000);

// 4. 使用Looper的方式
Looper.prepare();
Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
Looper.loop();

// 5. 使用Handler的方式
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case 1:
                Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
                break;
        }

    }
};
// 发送消息
handler.sendEmptyMessage(1);
或者
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(MainActivity.this, "sdf", Toast.LENGTH_SHORT).show();
    }
});

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,024评论 25 709
  • 1 概述 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地...
    Kevin_Junbaozi阅读 709评论 0 2
  • 某夜,躺在床上,又无睡意。想人无人可想,想事无事可想,突然想起它,它是一条沟,在我出生的小山村的西南方,西北...
    青鸟筑巢阅读 521评论 0 3
  • 信息网络的高速发展造成了网路信息的大爆炸,人们接受着各式各样的知识碎片。 这是最好的时代,这是娱乐致死的时代,没有...
    鱼沿阅读 176评论 0 0
  • (彼得大道上的小丑形单影只很瘦 为什么要用手绢掩饰着你的笑容 彼得大道上的小丑被冻得在发抖 为什么你毛衣裹得超厚露...
    徐秀美阅读 143评论 0 0