gpt4 book ai didi

java - MainLooper 与 runOnUiThread

转载 作者:太空狗 更新时间:2023-10-29 16:17:10 26 4
gpt4 key购买 nike

我是 Android 世界的新手。跟随和我应该使用哪个在主线程上运行方法之间到底有什么区别?

1)

Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
// Do some thing
}
};
mainHandler.post(myRunnable);

2)

runOnUiThread(new Runnable() {
@Override
public void run() {
// Do some thing
}
});

最佳答案

来自 Activity 的源代码:

public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}

您可以看到 runOnUiThread 做了几乎相同的事情,即在 Handler 上发布一个 Runnable。主要区别在于,如果您已经在 ui 线程上调用它,它会直接运行。

我会使用第二个,因为当您可以使用 Activity 之一时,无需创建另一个处理程序。

第一种情况是在手边没有ActivityView 时使用,您可以在上面发布Runnable(例如在 Service 中)。

此外,您会注意到 Handler 的默认构造函数使用当前线程的 Looper,这意味着您不必获取 mainLooper 如果您是从 UI 线程创建 Handler

关于java - MainLooper 与 runOnUiThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com