Можно ли отправить событие из потока в активность? - PullRequest
4 голосов
/ 28 января 2010

Если я хочу отправить событие, например, OnClick, чтобы активность из потока? Спасибо.

Ожидаемый рабочий поток ниже:

public class HelloAndroid extends Activity {

   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Crate threadA
       Start threadA
   }

   public void OnSomeEvent() {
       do something that changes the views in this activity;
   }

   private class ThreadA extends Thread {
       public void run() {
           do something ...

           Send Some Event to Activity HelloAndroid.
       }
   }

Ответы [ 4 ]

5 голосов
/ 28 января 2010

Вы всегда можете отправить сообщение из цепочки в активность, например:

//this should be in your Activity class
private Handler SomeHandler = new Handler() {
    public void handleMessage(Message msg) {
        ReactOnMessage();
    }
};


private class SomeThread implements Runnable {
    public void run() {
        doSomething();
        SomeHandler.sendEmptyMessage(0);
    }
}

Вы также можете создать сообщение, которое будет содержать некоторые значения.

2 голосов
/ 28 января 2010

Вам придется использовать обработчики для обновления пользовательского интерфейса.

1 голос
/ 28 января 2010

Все связанные с пользовательским интерфейсом события должны выполняться из потока пользовательского интерфейса. http://developer.android.com/guide/appendix/faq/commontasks.html#threading

0 голосов
/ 28 января 2010

Если я правильно понимаю, вы хотите вызвать метод OnSomeEvent() из HelloAndroid из вашего внутреннего ThreadA класса, верно?

Если это так, вы можете исправить:

private class ThreadA extends Thread {
    public void run() {
        HelloAndroid.this.OnSomeEvent();
    }
}

или даже проще, просто вызовите метод OnSomeEvent() напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...