2012-04-18 41 views
2

私はAndroid 3.1アプリケーションを開発しています。アクティビティが表示された後にAsyncTaskを実行します。

アクティビティが表示された後にAsyncTaskを実行します。 AsyncTaskを実行する前にユーザーに何かを見せたい

AsyncTaskを実行することはお勧めしません。

ここでAsyncTaskonStart()またはonResume()に実行する必要がありますか?

実行前にアクティビティを表示するのに十分な時間を置いておきたいと思います。

+0

@ user370305ああ、申し訳ありません。 AsyncTask on onCreate()を実行することはお勧めしません。 – VansFannel

+0

'onStart()'は、ビューが画面に描画された後に**呼び出されません。 – Graeme

+0

それは当てはまりません。その段階では、画面上にビューが表示されません。この時点のビューは膨らみ、 'Activity'ルートビューに添付されます。 [setContentView()](http://developer.android.com/reference/android/app/Activity.html#setContentView(int)) – Graeme

答えて

-2

Viewオブジェクトを実装し、onDraw()を上書きします。最初の画面が

+0

これはカスタムビュー(または匿名カスタムビュー)を作成し、 'onDraw()'メソッドをそれと関係のないコードで汚染することを意味します。 'View'が描画された後にコードを起動させるための(醜いしかし良い)良い方法については私の答えを見てください。 – Graeme

9

onCreate()onStart()onResume()は、オペレーティングシステムによって呼び出されるライフサイクルメソッドで、直接呼び出すことはできません、ユーザーに表示されているとき、あなたは正確に知っているよ
そのように。ただし、コードが活動のライフサイクルのこの段階で実行したためにそれらを上書きすることができます。

enter image description here

しかし、あなたはあなたのAsyncTaskがあなたのView秒のすべての後に起動したい場合は、画面に膨張して描かれていますあなたは、この中にコードを配置する必要があります。上記の例toReturn

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

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

はあなたのonCreate()メソッド内のビューです。あなたが好きなビューでもかまいません。

これは、ビューからViewTreeObserverをプルし、そのビューにリスナーを追加します。このリスナーは、ビューが画面に描画されたときに呼び出されます。それはあなたが、これはビューが描かれているすべての時間焼成コードを停止しますと「removeGlobalOnLayoutListenerは() `の行に保つことが重要です。

+1

あなたを祝福してください! "OnCreate()"や "OnResume()"内で実行されないコマンドでも同様の問題が発生していますが、インターフェイスがまだロードされていないためにさまざまなメソッドがnullを返してしまい、 (非同期タスクを使わなくても!)ありがとう! –

0

あなたはonWindowsFocusChanged方法でyurのコードを置くことができます。あなたがに内部のスレッドを使用することができます これは、初めてアクティビティを開始するときだけでなく、自分のアクティビティに重点が置かれるたびに実行されることに注意してください(これはあなたに問題があるかどうかわかりません)。

+0

トーストや対話でフォーカスが得られるたびに、またはアクティビティがバックグラウンドに置かれることが再開されるたびに、コードが実行されませんか? – Graeme

+1

はい、本当にありがとうございます。質問には詳しくは書かれていませんが、アクティビティに焦点が当てられるたびにこの問題が発生する可能性があることを強調しました。これが問題であれば、私のアプローチは破棄すべきです。私は例として、フォーカス取得時にバックグラウンドミュージックを開始/再開するのに成功しました。 – Zappescu

+0

それを使用する良い例! :) – Graeme

1

回答は私が私の活動場所で同じ要件をhade

onResume()であります私は リストはとてもそのためAsyncTaskを使用し、サーバからデータを取得して...他のボタンとイメージといくつかのリストを表示する必要があります。..

しかし、空のリストビュー画面の他の部分を表示するために必要とされる前に

..

ので、まずそれがonCreate()に行くとき、私はonResume()コールAsynctaskで、その後、リストビューのアダプタにempty arraylistを設定し、そのタスクでのArrayListを記入し、adapter.notifyDataSetChanged()

を呼び出すその後、別の問題がoccure..when私は次のアクティビティに移動し、戻ってきます私が必要としていなくても、常にasynctaskを呼び出します。

したがって、if(arrayList.size()==0)のような条件を入力してから、asynctask elseを呼び出してください。

関連する問題