0

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

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

首先,为什么 runOnFirstFix 又被执行了?其次,为什么它会导致第二次异常?我猜我不理解生命周期的某些部分。

谢谢。

4

1 回答 1

0

最初对我来说,需要从 UI 线程调用 AsyncTask 并不明显。因此,当 runOnFirstFix 第二次运行时,它来自一个不在 UI 线程上的 Runnable。为了解决这个问题,我简单地在第一个运行 AsynchTask 的内部创建了另一个 Runnable。

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

于 2011-05-19T17:53:47.547 回答