私は Android 3.1 アプリケーションを開発しています。
AsyncTask
アクティビティが表示された後に実行したい。execute の前にユーザーに何かを表示したいAsyncTask
。
AsyncTask
で実行することはお勧めできませんonCreate()
。
どこで実行AsyncTask
する必要がありますonStart()
かonResume()
?
実行する前にアクティビティを表示するのに十分な時間を残したい.
私は Android 3.1 アプリケーションを開発しています。
AsyncTask
アクティビティが表示された後に実行したい。execute の前にユーザーに何かを表示したいAsyncTask
。
AsyncTask
で実行することはお勧めできませんonCreate()
。
どこで実行AsyncTask
する必要がありますonStart()
かonResume()
?
実行する前にアクティビティを表示するのに十分な時間を残したい.
onCreate()
、onStart()
およびonResume()
は、オペレーティング システムによって呼び出されるライフサイクル メソッドであり、直接呼び出すべきではありません。ただし、それらをオーバーライドして、アクティビティ ライフサイクルの次の段階でコードを実行することができます。
ただし、すべての が膨張して画面に描画された後に AsyncTask を開始する場合はView
、次のコードを配置する必要があります。
toReturn.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
toReturn.getViewTreeObserver().removeGlobalOnLayoutListener(this);
// asyncTask.execute();
}
});
上記の例toReturn
は onCreate() メソッドのビューです。好きな景色にできます。
これはビューから をプルViewTreeObserver
し、ビューが画面に描画され終わったときに呼び出されるリスナーをそれに追加します。「removeGlobalOnLayoutListener()」行を保持することが重要です。これにより、ビューが描画されるたびにコードが実行されなくなります。
答えはonResume()
他のボタンと画像を含むリストを表示する必要があるアクティビティで同じ要件がありました..リストはサーバーからデータを取得していたので、そのためにAsyncTaskを使用しました..
しかし、その前に、空のリストビューと画面の他の部分を表示する必要がありました..
最初にリストビューのアダプターonCreate()
に設定し、次にAsynctaskを呼び出し、そのタスクでArrayListを埋めて呼び出しますempty arraylist
onResume()
adapter.notifyDataSetChanged()
次に、別の問題が発生します..次のアクティビティに移動して戻ってくると、必要がなくても常にasynctaskが呼び出されます..
if(arrayList.size()==0)
そのため、asynctask else
dontを呼び出すような条件を設定していました。
あなたのコードを onWindowsFocusChanged メソッドに入れることができます。内部のスレッドを使用してタイマーを管理し、特定の asynctask を開始できます。これは、アクティビティを初めて起動したときだけでなく、アクティビティにフォーカスがあるたびに実行されることに注意してください (これが問題になるかどうかはわかりません)。
オブジェクトを実装し、View
をオーバーライドしますonDraw()
。
そうすれば、最初の画面がいつユーザーに表示されるかを正確に知ることができます