ProgressDialog在onPreExecute中崩溃

时间:2012-02-26 08:46:42

标签: java android

我遇到了崩溃“无法在线程中的onPreExecute中创建未调用Looper.prepare()的线程内的处理程序。我的理解是onPreExecute在UI线程上运行,那么它怎么会崩溃呢?

public void onPreExecute() {
        if (loading == null || !loading.isShowing())
            loading = ProgressDialog.show(co, "",
                    "Retrieving Geolocation...", true);
    }

很奇怪,它有时有效,有时不适用

2 个答案:

答案 0 :(得分:0)

从您的问题看起来就像是在线程中使用onPreExecute()

onPreExecute()是android提供的AsyncTask类中的方法。如果你覆盖它,那么它将确保该代码在UI线程上运行,而不仅仅是onPreExecute()代码中的任何地方! 当您重写方法时,一个好主意是始终使用@Override表示法,这样IDE会通知您是否有任何覆盖给定签名的方法是否存在......

答案 1 :(得分:0)

AsyncTask Threading rules(几段落下)陈述:

  • 必须在UI线程上创建任务实例。
  • 必须在UI线程上调用
  • execute(Params ...)。
  • 不要手动调用onPreExecute(),onPostExecute(Result),doInBackground(Params ...),onProgressUpdate(Progress ...)。
  • 任务只能执行一次(如果尝试第二次执行,则会抛出异常。)

我的猜测是你在后台线程上调用了execute()