2013-04-12 9 views
1

Когда я пишу коды на платформе Android, я часто должен быть осторожен в работе пользовательского интерфейса, что может быть сделано только в потоке пользовательского интерфейса, я это четко знаю, и я знаю, почему GUI использует один поток для работать с виджетами UI, в случае многопоточной одновременной работы. Но я хочу знать, как система Android может различать поток пользовательского интерфейса и наш собственный поток, отличный от UI. В UI-потоке есть идентификатор?Идентификатор темы пользовательского интерфейса Android

ответ

0

Любой процесс, который вы вызываете из своего MainActivity, запускается в потоке пользовательского интерфейса. Если вы не хотите что-то запускать в потоке пользовательского интерфейса, запустите его в AsyncTask или фоновом потоке. Это предотвратит блокировку пользовательского интерфейса, чтобы пользователь мог взаимодействовать с вашим приложением.

2

Если вы хотите знать, если вы находитесь в потоке пользовательского интерфейса вы можете сделать что-то вроде:

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

Итак, чтобы ответить на ваш вопрос, да, поток пользовательского интерфейса имеет идентификатор: «главный».

+0

Я хочу знать, что, как андроида система идентичности каждого приложения поток пользовательского интерфейса, как заставить их стать потоком пользовательского интерфейса. –

+0

Как система Android добавляет идентификатор: «main» в Thread UI? И будет ли он каждый раз судить о контексте потока пользовательского интерфейса? Как и в случае с суждением, как вы упомянули, тогда он будет запускать связанные ui в рамках. –

+0

Не задавайте свой вопрос. Объясните, что вы пытаются достичь? – Cristian

0

Информация предоставлена ​​системой Android, поэтому ее можно исследовать отдельно.

Однако, когда вы разрабатываете приложение, наилучшей практикой является то, что вам следует избегать суждения или реверсирования внутренней работы каркасов и адаптации вашего приложения. Скорее, вы должны посмотреть на свое требование и найти способ его достичь.

В вашем случае очевидно, что вам нужно выполнить кусок кода в потоке графического интерфейса пользователя. Для этого вам не нужно создавать поток в виде потока GUI. Вы можете сделать это одним из следующих способов:

  1. Используйте Runnables и отправьте свой код в основное действие, что-то типа;

    myActivity.post (новый Runnable() {

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

    )};

  2. Если активность недоступна, вы можете найти главного обработчика приложения и сообщения для него. Что-то вроде;

    Обработчик appHandler = новый обработчик (context.getMainLooper()); appHandler.post (новый Runnable (....

  3. Вы можете использовать runOnUIThread()

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

Смежные вопросы