1

我的主要活动中有一个异步任务,当我按下按钮时它会运行。现在由于某种原因,如果请求时间过长(由于服务器不可用),我什至无法使用后退按钮关闭活动。有谁知道为什么会这样?从这个Android AsyncTask blocks back key dispatch Event我了解到后退按钮应该自动终止我的活动并完成异步任务。但这似乎并没有发生。我可以退出活动的唯一方法是按下我的安卓手机上的主页按钮,这当然只是简单地保存状态,所以一旦我再次打开活动,异步任务仍然会继续执行。

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) 。如果你在 doInBackground() 中使用了一些 for 循环,那么你应该检查 isCancelled() 的另一件事。

于 2012-10-22T13:56:04.307 回答