1

我想在延迟几秒钟后在 UI 线程上实现一些操作,并尝试了这种方法 -

final Handler handler1 = new Handler();
final Runnable r = new Runnable() {
public void run() {
// operations to do 
 }
};
runOnUiThread(new Runnable() {
 @Override
 public void run() {
 handler1.postDelayed(r, 1000);
 }
 });

这里我有两个可运行对象,所以我的问题是我在这里执行的操作是在 UI 线程或另一个线程中执行的,因为我不直接在 UI 线程的 Runnable 对象中执行操作。此外,如果这不是延迟后在 UI 线程中执行操作的正确方法,请提出所需的任何修改。

4

1 回答 1

4

当您使用 Handler 发布 Runnable 时,Handler 会在创建该 Handler 的任何线程上执行它。

Handler 的默认构造函数new Handler()new Handler(Looper.myLooper()). 这可能意味着 Handler 将在主线程上执行 Runnables,但前提是实例化发生在主线程上。

无论哪种方式,您所做的都是多余的。runOnUiThread()是没用的。只需更改 Handler 的构造函数:

final Handler handler1 = new Handler(Looper.getMainLooper());
handler1.postDelayed(r, 1000);
于 2018-11-01T16:47:09.217 回答