Java ProgressDialog在onPreExecute中崩溃
我在一个线程的onPreExecute中遇到一个崩溃“无法在未调用Looper.prepare()的线程内创建处理程序”。据我所知,onPreExecute是在UI线程上运行的,所以它怎么会崩溃呢Java ProgressDialog在onPreExecute中崩溃,java,android,Java,Android,我在一个线程的onPreExecute中遇到一个崩溃“无法在未调用Looper.prepare()的线程内创建处理程序”。据我所知,onPreExecute是在UI线程上运行的,所以它怎么会崩溃呢 public void onPreExecute() { if (loading == null || !loading.isShowing()) loading = ProgressDialog.show(co, "",
public void onPreExecute() {
if (loading == null || !loading.isShowing())
loading = ProgressDialog.show(co, "",
"Retrieving Geolocation...", true);
}
非常奇怪的是,它有时有效,有时无效。从您的问题来看,似乎您正在线程中使用
onPreExecute()
onPreExecute()
是android提供的AsyncTask
类中的一个方法。如果覆盖它,那么它将确保代码在UI线程上运行,而不仅仅是onPreExecute()
代码中的任何地方!
一个好主意是在重写方法时始终使用@Override
符号,这样IDE将通知您是否存在任何使用给定签名进行重写的方法 (下面几段)说明:
- 必须在UI线程上创建任务实例
- 必须在UI线程上调用execute(参数…)
- 不要手动调用onPreExecute()、onPostExecute(结果)、doInBackground(参数…)和onProgressUpdate(进度…)
- 该任务只能执行一次(如果尝试第二次执行,将引发异常)
我猜您在后台线程上调用了
execute()
。我没有从我的代码开始执行。当我执行线程时,Android会正确启动它,我可能会执行两次。我会检查的。