我想在几秒钟的延迟后对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线程中执行操作不是正确的方法,请提出任何必要的修改建议。
答案 0 :(得分:1)
当您使用处理程序发布可运行对象时,处理程序将在创建该处理程序的任何线程上执行该处理程序。
处理程序的默认构造函数new Handler()
是new Handler(Looper.myLooper())
的同义词。这可能意味着处理程序将在主线程上执行Runnable,但前提是实例化发生在主线程上。
无论哪种方式,您所做的都是多余的。 runOnUiThread()
没有用。只需更改处理程序的构造函数:
final Handler handler1 = new Handler(Looper.getMainLooper());
handler1.postDelayed(r, 1000);