当我在Android平台上编写代码时,我经常必须小心UI操作,这只能在UI Thread中完成,我清楚地知道,并且我知道为什么GUI使用单线程来操作UI小部件,以防万一多线程同时操作。但我想知道android系统如何区分UI线程和我们自己的非UI线程。UI线程有标识符吗?
答案 0 :(得分:2)
如果您想知道自己是否在UI线程中,可以执行以下操作:
if("main".equals(Thread.currentThread().getName())) {}
所以,回答你的问题,是的,UI线程确实有一个标识符:“main”。
答案 1 :(得分:0)
您从MainActivity调用的任何进程都在UI线程上运行。如果您不希望在UI线程上运行某些内容,则在AsyncTask或后台线程中启动它。这样可以防止它阻止用户界面,这样用户仍然可以与您的应用进行互动。
答案 2 :(得分:0)
此信息由Android框架保存,可以在同一个网站上进行调查。
但是,在开发应用程序时,最佳做法是避免判断或逆向设计框架内部工作并调整应用程序。相反,你应该看看你的要求并找到一种方法来达到它。
在您的情况下,显然您需要在GUI线程上执行一段代码。为此,您不需要将您的线程作为GUI线程。您可以通过以下方式之一完成此操作:
使用Runnables并将代码发布到主要活动,例如;
myActivity.post(new Runnable(){
@override
public void run(){
// your code to be run on GUI thread
}
)};
如果无法访问活动,那么您可以找到应用程序的主要处理程序并发布到它。喜欢的东西;
处理程序appHandler = new Handler(context.getMainLooper()); appHandler.post(new Runnable(....
您可以使用runOnUIThread()