Android вызвать внешнюю функцию из потока - PullRequest
2 голосов
/ 10 июня 2010

скажем, например, у меня есть этот код в моей деятельности:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   
    Thread cThread = new Thread(new Runner());
    cThread.start();
}

private NotifyMe(){
    //do something here
}

, и это мой класс Runner:

public class TCPClient implements Runnable {
   public void run(){
      //call NotifyMe() [THIS IS MY QUESTION]
   }
}

У меня есть поток в моей деятельности, который запускает RunnerУчебный класс.Как только поток начнется, я бы хотел вызвать функцию NotifyMe (), которая находится в действии.Это возможно?Пожалуйста, дайте мне знать, если вы не поняли мой вопрос.

1 Ответ

1 голос
/ 10 июня 2010

Вы можете добавить конструктор к TCPClient, который получает ссылку на действие, изменить метод notifyMe на public и затем вызвать метод notifyMe для объекта действия, который хранится в потоке.

Проблема, с которой вы столкнетесь, заключается в том, что действия могут быть закрыты, приостановлены, уничтожены во время работы вашего потока.Чтобы проверить, все ли еще активно действие, используйте метод isFinishing () из действия.

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

Более или менее несвязанное примечание, если у вас есть очень небольшая тема, котораяне будет работать все время, пока работает ваше приложение, используйте AsyncTask .Это позволит вам просто поместить одну операцию в фоновом режиме.

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