2010-12-02 24 views
5

私はAndroid n00bなので、私と一緒に裸です。別のスレッドクラスからのデータをAndroidのアクティビティに渡す方法

私はクラスで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...] 
} 

はRecordActivityクラスに私のRecordThreadクラスからのデータをポストバックする方法はありますか? 2つの異なる.javaファイルを使用してハンドラを接続する方法はありますか?

また、この問題を解決する正しい方法ですか?代わりにAsyncTaskを使用する必要がありますか?

答えて

4

としてハンドラを宣言し、使用し、あなたのコンストラクタRecordThreadクラスにパラメータとしてごmHandlerを渡し、そしてRecordActivityクラスではActivityクラス

にデータを渡すためにmHandler.obtainMessage(...).sendToTarget()を使用します。

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

次に、obtainMessage(int what, int arg1, int arg2)などを使用した場合は、msg.whatmsg.arg1、およびmsg.arg2を使用して、obtainMessage()の呼び出し方法に依存します。

0

Android fundamentalsをご覧ください。 Androidの主要アプリケーションコンポーネントの概要を紹介します。私はこれがAndroidで始まる人にとっては必読であると思う。

サービスが必要な場合があります。

サービスはメインスレッド上で実行されるため、高価な操作を実行する場合は、Handling Expensive Operations in the UI Threadをチェックアウトすることをお勧めします。

+4

私はこの勧告に同意しますが、ここでは質問の性質上何かには反応しないと思います。そのページはスレッドやメッセージの受け渡しを扱っていません。 – mikebabcock

関連する問題