3

私は現在、いくつかの AsyncTasks を使用してネットワーク接続を処理する必要がある Android アプリケーションに取り組んでいます。

これは、接続を確立し、マイク入力を処理する新しいタスクを呼び出す最初のタスクです。

private class establishConnectionTask extends
        AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        try {
            // initialize connection
            initConnection();
            MicrophoneTask micTask = new MicrophoneTask();
            micTask.execute("");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) {
        mReadInputTask = new readInputTask();
        mReadInputTask.execute("");
        super.onPostExecute(result);
    }

すべて正常に動作し、接続は機能しており、データを転送できます。また、MicrophoneTask もその仕事をしています。

問題は次のとおりです。

onPostExecuteメソッドでは、すべてのネットワーク入力を処理する新しい AsyncTask を作成しています。

readInputTask は次のようになります。

private class readInputTask extends AsyncTask<String, Integer, String>
{

    @Override
    protected void onPreExecute()
    {
        Log.d("DEBUG", "pre");
        super.onPreExecute();

    }

    @Override
    protected String doInBackground(String... params) {
        // blocking readInput method
          Log.d("DEBUG", "doInBackground");
    }


    @Override
    protected void onPostExecute(String result) {
        Log.d("DEBUG", "post");
        super.onPostExecute(result);
    }
}

readInputTask は、readInputTask の onPreExecute メソッドでスタックします。「doInBackground」と「post」も期待していますが、得られる唯一の出力は「pre」です。

誰かがエラーを見たり、これに対する解決策を知っていますか?

どんな助けでも大歓迎です!

4

1 に答える 1

2
mReadInputTask.execute("");

を使用するAsyncTask#execute(params)と、AsyncTasks は順番に実行されます。AsyncTasks を並行して実行するには、 を使用しますAsyncTask#executeOnExecutor(...)

ドキュメントからexecuteOnExecutor (Executor exec, Params... params)

このメソッドは通常、THREAD_POOL_EXECUTOR と一緒に使用して、AsyncTask によって管理されるスレッドのプールで複数のタスクを並行して実行できるようにしますが、独自の Executor をカスタム動作に使用することもできます。

于 2013-09-23T21:18:36.657 に答える