1

ボタンを押すと実行されるメイン アクティビティに Async タスクがあります。なんらかの理由で、リクエストに時間がかかりすぎると(サーバーが利用できないため)、戻るボタンを使用してアクティビティを閉じることさえできません。なぜこれが起こっているのか誰にも分かりますか?このAndroid AsyncTask ブロック バック キー ディスパッチ イベントから、戻るボタンがアクティビティを自動的に強制終了し、非同期タスクを終了する必要があることを理解しています。しかし、それは起こっていないようです。アクティビティから抜け出す唯一の方法は、Android携帯のホームボタンを押すことです。もちろん、状態を保存するだけなので、アクティビティを再度開くと、非同期タスクは引き続き実行されます。

class mytask extends AsyncTask<Void,Void,String>
        {
            HttpResponse response;



            @Override
            protected void onPreExecute()
            {
                // TODO Auto-generated method stub
                super.onPreExecute();
            }

            @Override
            protected String doInBackground(Void... arg0) 
            {
                // TODO Auto-generated method stub
                Log.d("In","IN");


                    HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("someurl");

                try 
                {
                    // Add your data
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                    nameValuePairs.add(new BasicNameValuePair("name", "somename"));
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                response = httpclient.execute(httppost);
               p=inputStreamToString(response.getEntity().getContent()).toString();        
                     return p;


                } 
                catch (ClientProtocolException e) 
                {
                    // TODO Auto-generated catch block
                } 
                catch (IOException e)
                {
                    // TODO Auto-generated catch block
                }

                return null;
            }
            protected void onPostExecute(String result) 
            {
                // TODO Auto-generated method stub
                super.onPostExecute(result);



            }



        }
4

2 に答える 2

0

以下をせよ:

たとえば、 asynctask クラス オブジェクト:

       mytask.cancel(true)

戻るボタンのクリックで

于 2012-10-22T13:54:22.947 に答える
0

非同期タスクの onCancelled() メソッドをオーバーライドし、バック プレスで yourAsync.cancel(true) を呼び出しました。もう 1 つ、doInBackground() で for ループを使用している場合は、isCancelled() をチェックする必要があります。

于 2012-10-22T13:56:04.307 に答える