3

私は Android 3.1 アプリケーションを開発しています。

AsyncTaskアクティビティが表示された後に実行したい。execute の前にユーザーに何かを表示したいAsyncTask

AsyncTaskで実行することはお勧めできませんonCreate()

どこで実行AsyncTaskする必要がありますonStart()onResume()?

実行する前にアクティビティを表示するのに十分な時間を残したい.

4

4 に答える 4

11

onCreate()onStart()およびonResume()は、オペレーティング システムによって呼び出されるライフサイクル メソッドであり、直接呼び出すべきではありません。ただし、それらをオーバーライドして、アクティビティ ライフサイクルの次の段階でコードを実行することができます。

ここに画像の説明を入力

ただし、すべての が膨張して画面に描画された後に AsyncTask を開始する場合はView、次のコードを配置する必要があります。

    toReturn.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        public void onGlobalLayout() {
            toReturn.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            // asyncTask.execute();
        }
    });

上記の例toReturnは onCreate() メソッドのビューです。好きな景色にできます。

これはビューから をプルViewTreeObserverし、ビューが画面に描画され終わったときに呼び出されるリスナーをそれに追加します。「removeGlobalOnLayoutListener()」行を保持することが重要です。これにより、ビューが描画されるたびにコードが実行されなくなります。

于 2012-04-18T08:50:09.377 に答える
1

答えはonResume()

他のボタンと画像を含むリストを表示する必要があるアクティビティで同じ要件がありました..リストはサーバーからデータを取得していたので、そのためにAsyncTaskを使用しました..

しかし、その前に、空のリストビューと画面の他の部分を表示する必要がありました..

最初にリストビューのアダプターonCreate()に設定し、次にAsynctaskを呼び出し、そのタスクでArrayListを埋めて呼び出しますempty arraylistonResume()adapter.notifyDataSetChanged()

次に、別の問題が発生します..次のアクティビティに移動して戻ってくると、必要がなくても常にasynctaskが呼び出されます..

if(arrayList.size()==0)そのため、asynctask elsedontを呼び出すような条件を設定していました。

于 2012-04-18T09:15:28.400 に答える
0

あなたのコードを onWindowsFocusChanged メソッドに入れることができます。内部のスレッドを使用してタイマーを管理し、特定の asynctask を開始できます。これは、アクティビティを初めて起動したときだけでなく、アクティビティにフォーカスがあるたびに実行されることに注意してください (これが問題になるかどうかはわかりません)。

于 2012-04-18T08:50:27.663 に答える
-2

オブジェクトを実装し、ViewをオーバーライドしますonDraw()
そうすれば、最初の画面がいつユーザーに表示されるかを正確に知ることができます

于 2012-04-18T08:46:39.843 に答える