AsyncTask中的ProgressDialog.show阻止我的程序执行

时间:2013-03-12 21:01:33

标签: android android-asynctask

这是我的代码的原型: -

class something extends Activity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        String str = objectofanotherthing.execute("").get();
    }

    class anotherthing extends AsyncTask
    {
        ProgressDialog Dialog;
        protected void onPreExecute()
        {
            Dialog = ProgressDialog.show(context, "Progressing", "Working on it,");
        }

        protected String doInBackground(String... params) 
        {
            ...
        }

        protected void onPostExecute(Integer result)
        { 
            Dialog.dismiss();
        }
    }
}

当我执行我的代码时,我的程序似乎停在ProgressDialog.show,没有崩溃没有错误。当我评论这部分时,程序执行正常。我不知道该怎么办。谁能帮我这个。提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您使用get()调用AsyncTask,则会阻止UI线程,您的应用可能会停止响应。取消get()来电,只有execute()

objectofanotherthing.execute("");

这意味着现在你的执行是独立于UI线程完成的,所以你不能指望你的String能够保存任何有用的东西。要解决这个问题,请将AsyncTask作为Activity中的嵌套类(您的代码段已经执行此操作),让doInBackground()返回一些有用的内容,并在onPostExecute()中关闭对话框并设置您需要设置的内容。

嵌套类的替代方法是将Activity传递给AsyncTask或定义接口,但如果Task用于一个活动,则嵌套更容易。