Asyn任务执行时阻止android后退按钮

时间:2012-01-09 07:00:22

标签: android android-asynctask back-button-control

当我的应用程序启动时,我正在调用Asyn Task函数。在后台进程中,它会点击3个API及其解析功能,大约需要10分钟的时间。

在这种情况下,如果用户点击android默认后退按钮,那么asyn任务将被取消。为了避免这种情况,我尝试按如下方式阻止后退按钮操作。

class First_Time_Sync extends AsyncTask<Void, Void, Void> 
     {
        ProgressDialog dialog1 = new ProgressDialog(Progressss.this);

        protected void onPreExecute() 
        {   
            backMode = true;
            dialog1.setMessage("Welcome \nThank you for waiting.");
            dialog1.setIndeterminate(true);
            dialog1.show();
        }       

        protected Void doInBackground(Void... arg0) 
        {
            .................                   
            return null;
        }

        protected void onPostExecute(Void unused) 
        {
            backMode = false;
            dialog1.dismiss();
        }
     }

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if (keyCode == KeyEvent.KEYCODE_BACK) 
        {
            if (backMode) 
            {
                return true;
            }
            else 
            {
                return super.onKeyDown(keyCode, event);
            }
        }       
        return super.onKeyDown(keyCode, event);
    }

现在,当调用异步任务函数并且用户单击后退按钮时,进度条会被取消。但后台进程继续,后退按钮被阻止,直到后台进程完成。

我希望即使按下后退按钮也会显示进度条,这样它就不会消失。

怎么做......

1 个答案:

答案 0 :(得分:4)

您必须将对话框的cancelable属性设置为false

  

dialog1.setCancelable(false);

这将阻止后退键取消对话