我正在尝试使用类中的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吗?
答案 0 :(得分:4)
将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.what
,msg.arg1
和{{1}来访问它们。 }。
答案 1 :(得分:0)
我建议您查看Android fundamentals。它为您提供了Android中关键应用程序组件的良好概述。对于任何以Android开头的人来说,我认为这是必读的。
服务可能就是您所需要的。
请记住,服务在主线程上运行,因此在执行昂贵的操作时,您可能需要签出Handling Expensive Operations in the UI Thread。