在一个android服务,我已经创建线程(s)做一些后台任务。

我有一个线程需要在主线程的消息队列上发布某个任务的情况,例如一个可运行的。

有没有办法得到主线程的处理程序和post Message/Runnable到它从我的其他线程?


当前回答

Kotlin 版本

当你在做某项活动时,就用

runOnUiThread {
    //code that runs in main
}

当你有活动上下文,mContext然后使用

mContext.runOnUiThread {
    //code that runs in main
}

当你在一个没有上下文的地方,然后使用

Handler(Looper.getMainLooper()).post {  
    //code that runs in main
}

其他回答

ContextCompat.getMainExecutor(context).execute {
  // do something
}

使用处理器的更精确的Kotlin代码:

Handler(Looper.getMainLooper()).post {  
 // your codes here run on main Thread
 }

使用Kotlin,在任何函数中都是这样的:

runOnUiThread {
   // Do work..
}

压缩代码块如下所示:

   new Handler(Looper.getMainLooper()).post(new Runnable() {
       @Override
       public void run() {
           // things to do on the main thread
       }
   });

这并不涉及传递活动引用或应用程序引用。

芬兰湾的科特林相当于:

    Handler(Looper.getMainLooper()).post(Runnable {
        // things to do on the main thread
    })

对于Kotlin,你可以使用Anko corountines:

更新

doAsync {
   ...
}

弃用

async(UI) {
    // Code run on UI thread
    // Use ref() instead of this@MyActivity
}