【问题标题】:How to pass data from separate thread class to activity in Android如何将数据从单独的线程类传递到Android中的活动
【发布时间】:2010-12-02 23:02:26
【问题描述】:

我正在尝试在课堂上使用 AudioRecord 分析音频。我的问题是我不知道我要尝试将其线程化到单独进程中的路线是否正确。我想要做的是监听主 UI 线程中的那个进程,并根据线程中的数据不断更新一个文本框。

这是我目前所拥有的:

//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 吗?

【问题讨论】:

    标签: java android multithreading android-asynctask


    【解决方案1】:

    mHandler 作为参数传递给RecordThread 类的构造函数,并使用mHandler.obtainMessage( ... ).sendToTarget() 将数据传递给Activity 类

    RecordActivity 类上,声明并使用 Handler 为:

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

    这取决于你如何调用obtainMessage(),例如,如果你使用obtainMessage(int what, int arg1, int arg2),你可以使用msg.whatmsg.arg1msg.arg2来访问这些。

    【讨论】:

      【解决方案2】:

      我建议您查看Android fundamentals。它让您对 Android 中的关键应用程序组件有一个很好的概述。我认为这是任何开始使用 Android 的人的必读之物。

      服务可能就是您所需要的。

      请记住,服务在主线程上运行,因此在执行昂贵的操作时,您可能需要检查 Handling Expensive Operations in the UI Thread

      【讨论】:

      • 虽然我同意该建议,但我认为它不会对这里问题的性质做出任何回应。该页面不涉及线程,也不涉及消息传递,除非是最模糊和最笼统的术语。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多