【发布时间】:2011-05-16 05:44:29
【问题描述】:
是否可以从 Runnable 执行 AsyncTask?根据我的经验,它可以完成,但并不安全。当我的应用程序第一次运行时,我的 AsyncTask 从 Runnable 运行良好。但是,当应用程序移到后台,然后带回来我得到“无法在未调用 Looper.prepare() 的线程内创建处理程序”。
这就是我想要做的事情: 我正在使用 MapView 并在 onCreate 中调用 runOnFirstFix(Runnable)。我的 Runnable 调用 AsyncTask 来执行 Web 服务调用,该调用会根据位置返回一些数据。 我将应用程序移至后台(通过点击主页按钮),一段时间后,我再次将应用程序向前移动,并且在我的 AsyncTask 上调用 execute() 时出现异常。
首先,为什么runOnFirstFix又被执行了?其次,为什么它会导致第二次异常? 我猜我不明白生命周期的某些部分。
谢谢。
【问题讨论】:
-
为什么要将
AsyncTask调用封装成Runnable?无论如何,它的doInBackground方法在后台线程中运行,在onPre-和onPostExecute中,您可以操作您在UI 线程上声明的gui 和其他内容。另一方面,当您将应用程序置于前台时,您的onCreate方法会被调用,这就是runOnFirstFix再次运行的原因。 -
我正在尝试重用现有的 AsyncTask,但我想我可以将该逻辑直接移动到 Runnable 中。至于第二次调用 runOnFirstFix 我不相信它是(直接)因为你所说的原因,而是因为我在 onCreate() 中实例化 MyLocationOverlay 的一个新实例
标签: android android-mapview android-asynctask runnable