美文网首页我爱编程
关于Android在非UI线程更新UI的问题。

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

作者: 笑叶林 | 来源:发表于2018-05-28 14:33 被阅读127次

为了解决在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在非UI线程更新UI的问题。

    本文链接:https://www.haomeiwen.com/subject/wchgjftx.html