我发现 AsyncTask 和 TimerTask 在不同的 API 版本中表现不同。
这是我的设置: TimerTask 设置为每隔一段时间触发一次。有一个服务,它的方法在 TimerTask 触发时被调用。该方法为一些后台处理实例化一个 AsyncTask。请注意,AsyncTask 不会触及 UI。
以上所有方法在 Android API 16 和 17 上都可以正常工作,但在较低级别的 API 上会失败,并出现标准的“无法创建处理程序... Looper.prepare()”错误,例如在此处说明Start AsyncTask in TimerTask
我通过将我的 AsyncTask 更改为 Runnable,然后在服务的方法中手动启动一个新线程来解决这个问题。但是,我想知道自 16 版以来 API 发生了什么变化?Looper.prepare() 现在实际上是在 TimerTask 线程中调用的吗?如果是这样,是否有一种简单的方法可以在我的代码中实现相同的东西,以便我可以继续使用 TimerTask(Runnable 解决方案在很多方面都不是最佳的,因为我可能会决定稍后从 AsyncTask 更新 UI)。
谢谢,
韦利科