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

Android 延迟后在UI线程上执行操作,android,android-runonuithread,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线程上实现一些操作,并尝试了这种方法-

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线程的可运行对象中执行操作。此外,如果这不是延迟后在UI线程中执行操作的正确方法,请建议所需的任何修改。

当您使用处理程序发布Runnable时,处理程序将在创建该处理程序的任何线程上执行它

处理程序的默认构造函数
newhandler()
newhandler(Looper.myLooper())
的同义词。这可能意味着处理程序将在主线程上执行Runnables,但仅当实例化发生在主线程上时

不管怎样,你所做的都是多余的。
runOnUiThread()
无效。只需更改处理程序的构造函数:

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

当您使用处理程序发布Runnable时,处理程序将在该处理程序创建的任何线程上执行它

处理程序的默认构造函数
newhandler()
newhandler(Looper.myLooper())
的同义词。这可能意味着处理程序将在主线程上执行Runnables,但仅当实例化发生在主线程上时

不管怎样,你所做的都是多余的。
runOnUiThread()
无效。只需更改处理程序的构造函数:

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

我在活动的onRestart()中使用默认处理程序(不在UI线程上运行)时遇到了这个问题,当应用程序在后台时,我恢复了它,有时处理程序不会执行。是因为没有在UI线程上执行Runnables,还是因为内存问题,导致系统没有创建线程,还是因为其他原因?你的代码能解决这个问题吗?我在活动的onRestart()中使用默认处理程序(不在UI线程上运行)时遇到了这个问题,当应用程序在后台时,我恢复了它,有时处理程序不会执行。是因为没有在UI线程上执行Runnables,还是因为内存问题,导致系统没有创建线程,还是因为其他原因?你的代码能解决这个问题吗?