1

我在Android平台写代码的时候,经常要注意UI的操作,只能在UI Thread中进行,我清楚的知道为什么GUI使用单线程来操作UI的widget,以防多线程线程同时操作。但是我想知道android系统如何区分UI线程和我们自己的非UI线程。UI线程有标识符吗?

4

3 回答 3

2

如果您想知道您是否在 UI 线程中,您可以执行以下操作:

if("main".equals(Thread.currentThread().getName())) {}

因此,要回答您的问题,是的,UI 线程确实有一个标识符:“main”。

于 2013-04-12T00:43:06.547 回答
0

您从 MainActivity 调用的任何进程都在 UI 线程上运行。如果您不想在 UI 线程上运行某些东西,请在 AsyncTask 或后台线程中启动它。这将防止它阻塞用户界面,因此用户仍然可以与您的应用程序交互。

于 2013-04-12T00:40:43.987 回答
0

此信息由 Android 框架保存,可以在其中进行调查。

但是,当您开发应用程序时,最佳实践是您应该避免判断或反向工程框架内部工作和调整您的应用程序。相反,您应该查看您的需求并找到实现它的方法。

在您的情况下,很明显您需要在 GUI 线程上执行一段代码。为此,您不需要将您的线程设为 GUI 线程。您可以通过以下方式之一执行此操作:

  1. 使用 Runnables 并将您的代码发布到主要活动,例如;

    myActivity.post(新可运行(){

    @override
    public void run(){
        // your code to be run on GUI thread
    }
    

    )};

  2. 如果活动不可访问,那么您可以找到应用程序的主处理程序并发布到它。就像是;

    处理程序 appHandler = new Handler(context.getMainLooper()); appHandler.post(新可运行(....

  3. 您可以使用 runOnUIThread()

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29

于 2013-04-12T05:09:55.893 回答