延迟后在UI线程上执行操作

时间:2018-11-01 16:42:36

标签: android android-runonuithread

我想在几秒钟的延迟后对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线程中执行操作不是正确的方法,请提出任何必要的修改建议。

1 个答案:

答案 0 :(得分:1)

当您使用处理程序发布可运行对象时,处理程序将在创建该处理程序的任何线程上执行该处理程序。

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

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

final Handler handler1 = new Handler(Looper.getMainLooper());
handler1.postDelayed(r, 1000);