2014-11-24 3 views
1

я получил FixedSizeThreadPool с 1 Тема (потому что я только нужно одно и каждый следующий запрос должен ждать, пока ранее запрос был завершен):Seperate Thread, который вызывает метод, который runsOnUiThread

myService = Executors.newFixedThreadPool(1); 
    myService.execute(new WorkerRunnable()); 

В моей WorkerRunnable я делать некоторые вещи и в середине я вызвать метод из моей деятельности:

myActivity.thisMethodRunsOnUiThread(); 

метод выглядит следующим образом:

public void thisMethodRunsOnUiThread() { 
    runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      I'm trying to Change a View here, that's why i Need to do this on Ui Thread 
     } 

    }); 
} 

И после этого на WorkerRunnable Наступает мой последний метод, который должен снова запустить на seperateThread из fixedSizePool

myActivity.thisMethodsRunsonUiThread(); 
thisMethodRunsAgainOnTheSeperateThread(); 

Но что я упомянул здесь является то, что он только вызывает метод, который должен RunOnUiThread после MethodWhichShouldRunOnSeperateThread. (Который является последним методом, поэтому мой поток будет завершен в это время). Может ли быть так, что seperateThread получил более высокий приоритет, чем MainThread, так что он ждет, пока seperateThread не будет закончен, а затем он начнет метод, который запускается на UiThread?

мне нужно закончить метод

myActivity.thisMethodsRunsonUiThread(); 

перед этим методом

thisMethodRunsAgainOnTheSeperateThread(); 

Может кто-нибудь объяснить, почему он действует, как это? Любая помощь приветствуется.

ответ

0

см http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)

если текущий поток не является потоком пользовательского интерфейса, действие размещено в очередь событий в потоке пользовательского интерфейса

Следовательно, это работоспособным необходимо подождать некоторое время, чтобы быть выполнен

Вы можете использовать wait() и notify()/notifyAll() java методы для обработки резьбы

+0

Можете ли вы предоставить код для лучшего понимания? Потому что вы сказали, что runnable должен подождать некоторое время для выполнения. В этом случае это не так. Я также объявлял статическую логическую переменную, которая переключается в true, если метод UIThread завершен. И я упаковал метод на отдельном потоке через Loop и спросил, установлено ли логическое значение true. Но while-Loop работает бесконечно, UIMethod никогда не вызывается, потому что seperateThread никогда не заканчивается. Надеюсь, вы понимаете. Может быть, я пропущу что-то ... – MMike

+0

Можете ли вы предоставить свой код :), вы не упомянули о своем статическом булевом флагове, и странно, что метод, который вы опубликовали onUIThread, не выполняется. – debi

+0

Не ошибитесь, я не хочу публиковать свой код. Кроме того, это перегрузило бы вопрос. Я думал, что лучший способ описать проблему - это то, как я сделал это выше. Я думаю, что это не странно, должно быть логическое решение. Да, я подумал, что сейчас подходящее время для этого Информация. Любые другие предложения? Понравилось бы, что – MMike

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