-2
我收集到一个不好的做法,即从不是UI线程的线程调用finish()
。当某个事件(在渲染/循环线程中计算)发生时,我需要结束一个活动。在后台线程上结束活动
根据对类似问题的回答,使用Handler发布请求以在UI线程上完成活动将是适当的。我试图做到这一点,但活动从未结束 - 发布前我必须做些什么,或者我应该使用完全不同的方法? 。在(循环)线程,他们在实例被创建
我收集到一个不好的做法,即从不是UI线程的线程调用finish()
。当某个事件(在渲染/循环线程中计算)发生时,我需要结束一个活动。在后台线程上结束活动
根据对类似问题的回答,使用Handler发布请求以在UI线程上完成活动将是适当的。我试图做到这一点,但活动从未结束 - 发布前我必须做些什么,或者我应该使用完全不同的方法? 。在(循环)线程,他们在实例被创建
处理程序默认情况下,为了确保处理程序是主UI线程上,你可以这样做:
Handler myHandler = new Handler(Looper.getMainLooper());
然后,发布项目到主线程,创建一个实现Runnable
接口的类然后发布到处理程序。
myHandler.post(new Runnable() {
@Override
public void run() {
// Code to run on UI thread.
}
});
另一个方便的花花公子技巧是,你可以张贴到View
这是你的活动可见。例如你的根视图。
View myView = findViewById(R.id.myViewId);
Runnable runnableObject = new MyRunnableObject();
myView.post(runnableObject);
有些事情要注意这一点。发布到视图的所有内容都将在UI线程上运行。发布到Views
的项目将不会执行,直到View
位于查看树上。您可以将Runnables发布到您的View
,然后他们都会发射第二个View
对用户可见。还应该注意的是,取消发布到视图的Runnable
并不是特别容易。他们在内部使用Handler,但remove____()
方法被抽象出来。
显示您的代码。和LogCat,如果发生任何错误.. – SilentKiller
我想知道downvote这个完全有效的问题的原因。有人请赐教。 –