从另一个线程在主线程中运行代码

在android服务中,我创建了一些线程来执行一些后台任务

我遇到一种情况,线程需要在主线程的消息队列上发布特定任务,例如Runnable

有没有办法获取主线程的处理程序,并将消息/可运行从我的另一个线程发送到它

注意:这个答案已经引起了很多关注,我需要更新它。自从原始答案发布后,@dzeikei的评论几乎和原始答案一样受到关注。因此,这里有两种可能的解决方案:

1。如果您的后台线程引用了上下文对象:

确保后台工作线程可以访问上下文对象(可以是应用程序上下文或服务上下文)。然后在后台工作线程中执行此操作:

//获取可用于发布到主线程的处理程序
Handler mainHandler=新处理程序(context.getMainLooper());
Runnable myRunnable=新Runnable(){
@凌驾
public void run(){..}//这是您的代码
};
mainHandler.post(myRunnable);

2。如果您的后台线程没有(或不需要)上下文对象

(由@dzeikei建议):

//获取可用于发布到主线程的处理程序
Handler mainHandler=新处理程序(Looper.getMainLooper());
Runnable myRunnable=新Runnable(){
@凌驾
public void run(){..}//这是您的代码
};
mainHandler.post(myRunnable);

发表评论