2017-06-05 21 views
0

私は多くのガイドを読みましたが、私はまだ混乱しています。DialogFragmentをAsyncTaskクラスから呼び出す必要がありますか?

どこかに私はあなたが活動クラス内部AsyncTaskクラス内DialogFragmentを呼び出す必要がありますので、「アクティビティフロー」は、DialogFragmentによって中断されるべきではないと読みました。

他のガイドでは、AsyncTaskを使用せずにActivityクラスからDialogFragmentが呼び出されていました。

だから私の質問です:DialogFragmentはAsyncTaskクラスを介してのみ呼び出す必要がありますか?

これまでのやり方です。 Activityクラスコード:

public class LunchActivity extends AppCompatActivity { 
....  
    public void callDialog(){ 
    class ShowInfoToUser extends AsyncTask<Bundle, Void, Bundle> {     
     ... 
     @Override 
     protected Bundle doInBackground(Bundle... args) { 
      ... 
     }  

     @Override 
     protected void onPostExecute(Bundle resultBundle) { 
      DialogFragment permissionDialogManager= permissionDialogManager.newInstance(messageBundle); 
      permissionDialogManager.show(activity.getSupportFragmentManager(), "Permission Dialog"); 
     }  
    }  
} 

これはDialogFragmentを拡張するクラスです。

public class PermissionDialogManager extends DialogFragment { 

    public static PermissionDialogManager newInstance(Bundle bundle) { 
     PermissionDialogManager frag = new PermissionDialogManager(); 
     frag.setArguments(bundle); 
     return frag; 
    }  

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     ... 
    } 
} 

ダイアログがユーザーを中断するように、私はANにそれを置くための理由を見ない

答えて

1

AsyncTaskのonPostExecuteメソッド内のコードは、UIスレッドで実行されます。あなたが指定した例では、コードがUIスレッドで実行されるため、AsynTaskを使用するかどうかに違いはありません。

この例では、AsyncTaskのdoInBackgroundメソッド(別のスレッドで実行する)で処理し、後でonPostExecuteメソッドで前の情報を使用してDialogFragmentを呼び出します。

UIスレッドでコードを実行する必要がある場合の方法

Processes and Threads

のアプリがユーザーの操作に応じて、集中して作業を行う場合、あなたが適切にあなたのアプリケーションを実装していない限り、このシングルスレッドモデルでは、パフォーマンスの低下をもたらすことができます。具体的には、UIスレッドですべてが発生している場合、ネットワークアクセスやデータベースクエリなどの長い操作を実行するとUI全体がブロックされます。スレッドがブロックされると、描画イベントを含むイベントはディスパッチできません。ユーザーの観点から見ると、アプリケーションはハングアップしているようです。さらに悪いことに、UIスレッドが数秒(現在は約5秒)以上ブロックされていると、ユーザーに悪意のある "応答しないアプリケーション"(ANR)ダイアログが表示されます。ユーザーはアプリケーションを終了し、不満足な場合はアンインストールすることにします。

0

ありがとうAsyncTask。ダイアログは、それ自体を生成するために膨大な時間を取ることは想定されていません。

関連する問題