1

AsyncTask での Http リクエスト中にユーザーがデータ接続を失う状況を処理しようとしています。現在、これが発生してアプリが停止した場合、AsyncTask は実行を終了しません。isCancelled() をチェックすることさえできません。なぜなら、Http リクエストは 1 つの関数呼び出しで停止するだけだからです。そのため、ループなどを実装することはできません。

UIスレッドで次を使用していますが、タスクがタスク内からキャンセルされたかどうかを確認する方法がわかりません:

    task = new LoginTask();
    task.execute(this, mUsername, mPassword);
    Handler handler = new Handler();
    handler.postDelayed(new Runnable()
    {
        @Override 
        public void run()
        {
            if (task != null && task.getStatus() == AsyncTask.Status.RUNNING)
            {
                task.cancel(true);
            }
        }
    }, 5000);
4

2 に答える 2

0

処理を停止するには、doInBackground() 内の isCancelled() をチェックする必要があります。doInBackground 内に適切な場所がある場合は、if ステートメントを追加できます。それ以外の場合は、http 接続でタイムアウトを設定することを検討する必要があります。

于 2013-07-10T14:46:43.043 に答える
0

KSoap 2 は Java で記述されているため、クラスの 1 つを抽象化し、HttpConnection に手動でタイムアウトを設定するオプションがあります。

これまでの説明に基づいて、おそらく、接続にタイムアウトを設定しないメソッドをオーバーライドし、それを独自のメソッドとタイムアウトする接続に置き換える必要があります。KSoap がオープン ソースであるため、管理しやすいはずです。幸運を。

于 2013-07-10T16:19:10.927 に答える