1

アクティビティを終了する直前に、2 つの非同期タスク (サーバー リクエストを実行するタスク) を実行しています。この非同期タスクを実行するアクティビティは、非同期タスクが完了するまでスタックする場合があり、次のアクティビティが表示され、非同期タスクが完了するまでスタックする場合があります。

私の質問は、アクティビティの UI がスタックしないようにこのタスクを実行する方法です (UI は非同期タスクの応答に依存しません)。

4

5 に答える 5

1

これを試すことができますか。

  1. ProgressDialog を作成し、不確定に設定して表示します。
  2. AsyncTask1 を呼び出し、その PostExecute で AsyncTask2 を呼び出します。これを onUiThread と呼ぶ必要があることを確認してください。
  3. Asynctask2 の Postexecute で、Progress ダイアログを閉じて、次のアクティビティを開始します。
于 2012-11-07T15:24:20.153 に答える
1

AsyncTask.get() アクティビティ コードのどこかで呼び出している可能性があります。タスクの実行が完了する前に呼び出すと、タスクが完了するまで待機します (したがって、UI が動かなくなります)。

于 2012-11-07T14:17:59.733 に答える
0

だけにコードを書いてAsyncTask doInBackground()呼び出します。UIにアクセスしているかどうかを確認できるようにします。

例えば:TestAsync extends AsyncTask...

TestAsync async = new TestAsync();
async.execute();

これを試して。通常、AsyncTask別のスレッドで実行する必要があります。2 つのインスタンスを作成する場合。そしてexecuteを呼び出します。独立して実行する必要があります。ただし、使用可能なスレッドが 1 つしかない可能性があるため、待機する必要があります (下位バージョンでは、プール サイズは 1 です)。

@TargetApi(Build.VERSION_CODES.HONEYCOMB) // API 11
void startMyTask(AsyncTask asyncTask) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    else
        asyncTask.execute(params);
}

他の方法は、通常のスレッドで実行する必要があります。

于 2016-09-12T06:36:06.800 に答える
0

onPostExecute()最初の非同期タスクで次のアクティビティを開始してください。また、新しいアクティビティに非同期タスクがある場合は、onCreate メソッドの最後の項目として呼び出します。これらの簡単なルールに従うと役立つはずです

于 2012-11-07T15:20:13.430 に答える