0

こんにちは、私はAndroidとAndroidスレッドが初めてなので、それを知りたいです

すべてのタスクまたはメソッドを実行するために、より多くのスレッドを使用するにはどうすればよいでしょうか。ユーザーが任意の UI コンポーネントをクリックしている間、ハンドラーthreadと動作についてほとんど知識がなくてもパフォーマンスに影響します。asynctaskしかし、内部ですべてのメソッドを実行するにはどうすればよいでしょうか。そうするasynctaskことで操作を行い、ユーザーが他の操作を行うこともできます。

アプリケーションで

  • マイクからの音声録音があります。
  • 次に進行状況バーを表示します。
  • 次に、いくつかの画像とその設定効果を含むギャラリーを表示します。
4

2 に答える 2

0

推奨される方法は、長時間実行されるタスクにAsyncTaskを使用することです。したがって、コンテキストの切り替えによりパフォーマンスが低下する可能性があるため、すべてを AsyncTasks で実行する必要はありません。

AsyncTasks の仕組みについては、ドキュメントを参照してください。

于 2013-02-19T15:09:29.077 に答える
0

を使用し、AsyncTask必要に応じてこれらを実装してください。ユーザーが何かをしている間にバックグラウンドで何かをするという考えに言及しているので、UIを変更したいと思うでしょう。

Android の詳細については、これらのリンクをご覧ください。彼らはカバーしRunnableAsyncTaskHandler

通常、ここに完全な例を貼り付けることはしませんが、満足のいく例を見つけるのに長い間苦労しました。あなたや他の人を助けるために、ここに私の好みの方法があります. 私は通常、タスクを開始したAsyncTaskへのコールバックで を使用します。Activity

この例では、ユーザーがonClick(...)ボタンなどでトリガーしたふりをしていますが、Activity.

// Within your Activity, call a custom AsyncTask such as MyTask
public class MyActivity extends Activity implements View.OnClickListener, MyTask.OnTaskComplete {
    //...

    public void onClick(View v) {
        // For example, thet user clicked a button
        // get data via your task

        // using `this` will tell the MyTask object to use this Activty
        // for the listener
        MyTask task = new MyTask(this);
        task.execute(); // data returned in callback below
    }

    public void onTaskComplete(MyObject obj) {
        // After the AsyncTask completes, it calls this callback.
        // use your data here
        mTextBox.setText(obj.getName);
    }
}

タスクからデータを取得するにはさまざまな方法がありますが、私OnTaskCompleteは上で実装され、下でトリガーされるようなインターフェイスを好みます。

ここでの主なアイデアは、内部クラスがより複雑になるにつれて、それらを避けたいということです。ほとんど個人的な好みですが、再利用可能なタスクを 1 つのクラスの外に分けることができます。

public class MyTask extends AsyncTask<Void, Void, MyObject> {

    public static interface OnTaskComplete {
        public abstract void onTaskComplete(MyObject obj);
    }
    static final String TAG = "MyTask";

    private OnTaskComplete mListener;

    public MyTask(OnTaskComplete listener) {
        Log.d(TAG, "new MyTask");
        if (listener == null)
            throw new NullPointerException("Listener may not be null");

        this.mListener = listener;
    }

    @Override
    protected MyObject doInBackground(Void... unused) {
        Log.d(TAG, "doInBackground");
        // do background tasks

        MyObbject obj = new MyObject();
        // Do long running tasks here to not block the UI
        obj.populateData();
        return 
    }

    @Override
    protected void onPostExecute(MyObject obj) {
        Log.d(TAG, "onPostExecute");
        this.mListener.onTaskComplete(obj);
    }
}
于 2013-02-19T15:28:33.290 に答える