从runnable调用asynctask

时间:2011-05-16 05:44:30

标签: android android-mapview android-asynctask runnable

是否可以从Runnable执行AsyncTask?根据我的经验,它可以完成,但不安全。当我的应用程序第一次运行时,我的AsyncTask从Runnable运行正常。但是当应用程序移动到后台时,然后带回来我得到“无法在未调用Looper.prepare()的线程内创建处理程序”。

这是我正在尝试做的事情: 我在onCreate中使用MapView并调用runOnFirstFix(Runnable)。 My Runnable调用AsyncTask来执行Web服务调用,该调用根据位置返回一些数据。 我将应用程序移动到后台(通过点击主页按钮),一段时间后我再次向前移动我的应用程序,并且我在我的AsyncTask上调用execute()时获得异常。

首先,为什么runOnFirstFix会再次被执行?其次,为什么第二次导致异常呢? 我猜测生命周期的某些部分我不明白。

感谢。

1 个答案:

答案 0 :(得分:0)

最初我不明白需要从UI线程调用AsyncTask。所以当runOnFirstFix第二次运行时,它来自一个不在UI线程上的Runnable。为了解决这个问题,我在第一个内部创建了另一个Runnable来运行AsynchTask。

我的runOnFirstFix似乎被调用两次的原因仅仅是因为我正在创建它的新实例。