0

開始時にすぐにサーバー クエリを呼び出すアクティビティがあります。以下はそのコードです。

今、それが開始さAsyncTaskれ、onSuccess で応答が得られたとします。アクティビティを終了した場合、応答を得る前に、つまり [戻る] ボタンを押します。

現在、コールバックは引き続き呼び出され、ダイアログを表示すると不良トークン例外がスローされます。ウィンドウ トークンを追加できません。アクティビティは実行されていますか。この AsyncTask を中断するにはどうすればよいですか。つまり、戻るボタンを押すと実行がonSuccess停止しますか?

ResponseCallback callback = new ResponseCallback() 
{
    @SuppressWarnings("deprecation")
    @Override
    public void onSuccess(String response) 
    {


            dialog = new AlertDialog.Builder(Chat.this).setMessage("BLABLA")
            .setTitle("Invite!")  
            .setCancelable(true)  
            .setPositiveButton(android.R.string.ok,  
            new DialogInterface.OnClickListener() 
            {  
               public void onClick(DialogInterface dialog, int whichButton)
               {
                       dialog.cancel();
                       sendInvite();
               }  
            }) 
            .setNegativeButton(android.R.string.cancel,
            new DialogInterface.OnClickListener() 
            {  
               public void onClick(DialogInterface dialog, int whichButton)
               {
                       dialog.cancel();
               }  
            })
            .show();
        }
        else 
        {

    }

    @Override
    public void onFailure(String exception) 
    {}
};

new MyAsyncTask(queryString, callback);
4

3 に答える 3

0

doBackground()タスクは既に実行されているため、単にキャンセルすることはできません。チェックを自分でコーディングする必要があります。たとえば、activityDestroyedブール値フィールドを に追加してAsyncTask、初期化してfalse. trueアクティビティのonDestroy()呼び出しで設定します。次に、ダイアログを表示する前にステータスを確認できます。

if (!activityDestroyed) {
    dialog = new AlertDialog.Builder(Chat.this).setMessage("BLABLA")
            .setTitle("Invite!")  
            .setCancelable(true)  
            .setPositiveButton(android.R.string.ok,  
            new DialogInterface.OnClickListener() 
            {  
               public void onClick(DialogInterface dialog, int whichButton)
               {
                       dialog.cancel();
                       sendInvite();
               }  
            }) 
            .setNegativeButton(android.R.string.cancel,
            new DialogInterface.OnClickListener() 
            {  
               public void onClick(DialogInterface dialog, int whichButton)
               {
                       dialog.cancel();
               }  
            })
            .show();
}

AsyncTask.cancel()編集:より適切な方法でそれを達成できるはずですAsyncTask.isCancelled()

于 2013-06-20T15:21:38.773 に答える
0

戻っても、タスクはまだ実行中です。サーバーとの http 接続を中止するのが正しい方法だと思います。

AsyncTaskたとえばOnTaskCanceledListener、単一のメソッドを使用して、インターフェースを実装することができますonTaskCanceled()。の実装は次のonTaskCanceled()ようになります (疑似コード):

@Override 
public void onTaskCanceled(){
   httpRequest.abort();
}

ここで、前のアクティビティに戻るときに、onTaskCanceled()からコールバックを呼び出しますAsyncTask。このように、あなたは通り抜けるべきではありませんonSuccess()

于 2013-06-20T15:25:27.113 に答える