Как передать данные из отдельного класса потока в активность в Android - PullRequest
5 голосов
/ 03 декабря 2010

Я пытаюсь проанализировать аудио, используя AudioRecord в классе. Моя проблема в том, что я понятия не имею, правильный ли маршрут, который я собираюсь пробовать, и включить его в отдельный процесс. Я хочу прослушать этот процесс в главном потоке пользовательского интерфейса и постоянно обновлять текстовое поле на основе данных в потоке.

Это то, что я имею до сих пор:

//RecordActivity.java
[...]
public class RecordActivity extends Activity {
    final Handler mHandler = new Handler();
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            updateResultsInUi();
        }
    };
    RecordThread t = new RecordThread();

private OnClickListener mClickListener = new OnClickListener() {

  public void onClick(View v) {
    t.start();

  }
}

//RecordThread.java
public class RecorderThread extends Thread {
[...]

@Override
public void run() {
[...audio process code...]
}

Есть ли способ отправить данные из моего класса RecordThread в класс RecordActivity? Есть ли способ подключить обработчик, используя 2 разных файла .java?

Кроме того, это даже правильный путь? Должен ли я использовать AsyncTask вместо этого?

Ответы [ 2 ]

4 голосов
/ 03 декабря 2010

Передайте ваш mHandler в качестве параметра конструктору вашего RecordThread класса и используйте mHandler.obtainMessage( ... ).sendToTarget() для передачи данных в класс Activity

В классе RecordActivity объявите и используйте обработчикas:

private final Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    }

Тогда это зависит от того, как вы вызвали getMessage (), если вы использовали, например, obtainMessage(int what, int arg1, int arg2), вы можете получить к ним доступ, используя msg.what, msg.arg1 и msg.arg2.

0 голосов
/ 03 декабря 2010

Я бы рекомендовал взглянуть на основы Android . Это дает вам хороший обзор ключевых компонентов приложения в Android. Я думаю, что это необходимо прочитать для всех, кто начинает с Android.

Услуга может быть то, что вам нужно.

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

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