是否可以从Runnable执行AsyncTask?根据我的经验可以完成,但不安全。当我的应用第一次运行时,我的AsyncTask可以从Runnable中正常运行。但是,当应用程序移动到后台,然后带回前面我得到“不能创建处理程序内部没有调用Looper.prepare()”的线程。从runnable调用asynctask
下面是我想要做的: 我正在使用MapView并在onCreate中调用runOnFirstFix(Runnable)。我的Runnable调用一个AsyncTask来执行一个Web服务调用,它根据位置返回一些数据。 我将应用程序移动到背景(通过点击主页按钮),一段时间后,我再次将应用程序向前移动,并在我调用AsyncTask的execute()时得到异常。
首先,为什么runOnFirstFix被再次执行?其次,它为什么第二次引发异常? 我猜测有一些我不明白的生命周期部分。
谢谢。
为什么你将'AsyncTask'调用封装到'Runnable'中?它的'doInBackground'方法在后台线程中运行,在'onPre-'和'onPostExecute'中,您可以操作您在UI线程中声明的gui和其他东西。另一方面,当你将应用程序放到前台时,你的'onCreate'方法被调用,这就是为什么'runOnFirstFix'再次运行。 – rekaszeru 2011-05-16 05:53:05
我想重用现有的AsyncTask,但我想我可以将该逻辑直接移入Runnable。至于runOnFirstFix的第二次调用,我不相信它是(直接)因为你陈述的原因,而是因为我正在onCreate()实例化一个MyLocationOverlay的新实例, – cagreen 2011-05-16 13:33:19