2016-07-31 7 views
0

の非同期タスクのために、自分のアプリの読み込みアクティビティにアクティビティを指定したいとします。Android非公開タスクの実行中にpreExecuteでアクティビティを開始しpostExecuteで終了します

preExecuteの間に起動され、postExecuteで終了しますか?

  @Override 
      protected void onPreExecute() 
      { 
       startActivity(new Intent(SearchActivity.this,LoadingActivity.class)); 
      } 
      @Override 
      protected void onPostExecute(String result) 
      { 
       // i want to finish loading activity here. 
      } 
+0

あなたはローダーダイアログなどでこれを行うことができます。アクティビティで行う必要はありません!! –

+0

これは私の仕事の要件です –

答えて

4

これはAndroidの仕組みではありません。

一度に1つのアクティビティがアクティブになり、AsyncTaskを開始すると、現在のアクティビティのコンテキストで実行されます。

したがって、技術的にはAsyncTaskからアクティビティを開始できますが、その親コン​​テキスト(AsyncTaskを開始したアクティビティ)は非アクティブになります。 AsyncTaskは引き続き実行されますが(実際にはAsyncTasksの大きな問題です)、クラッシュする可能性があります。そうでない場合でも、動作は定義されません。

Shubham Nandanwarの答えはうまくいくはずですが、これにアプローチする正しい方法ではありません。アクティビティとそのライフサイクルがどのように動作するのかというコンテキストで、あなたが何をしようとしているのかを再考する必要があります。

希望するアクティビティを起動し、そのアクティビティでAsyncTaskを使用して、実行する必要がある作業をすべて実行し、作業が完了したらアクティビティを終了することをお勧めします。

さらに、バックグラウンド処理(RxJavaなど)を行うより良い方法を見つけて、AsyncTaskを使用しないでください。

+0

私の場合、私は自分のロジックを「アクティビティの読み込み」で行うことができず、アクティビティ自体をアクティビティから終わらせません。私のタスクはAPIからデータをロードし、onPostExecute私はあなたのアプローチを使用する場合、私はそれぞれのタスクのための "読み込み"活動を作成します。私はちょうど "ローディングダイアログ"と同じようにこの "ローディングアクティビティ"を作りたいと思っています –

+0

はGreyBeardedGeekと同意します.. @AsmaaRashadこれはAndroidではできません.. !! –

+1

実行するタスクは、どのアクティビティがアクティブであるかによって制約を受ける必要があります。それはすべてバックグラウンドスレッドで実行する必要があります。私はあなたがonPostExecuteから何をやろうとしているのか分かりませんが、それが何であれUIスレッド上で起こるので、その決定をAsyncTaskから移動して親アクティビティに置き換えてください。 タスクごとに個別のアクティビティは必要ありません。 また、サポートされていない方法で動作させるのではなく、コンテキストの動作方法とAsyncTasksの動作を読み、意図したとおりに使用する必要があります。 – GreyBeardedGeek

関連する問題