【发布时间】:2017-03-05 07:36:06
【问题描述】:
我有一个长时间运行的计算,它将传感器数据作为参数。
得到计算结果后,我想调用一个方法来更新一个视图。
此计算可能需要一些时间,因此我无法在 Activity 代码中运行它,因为我收到传感器数据,因为 UI 线程冻结或变慢。
由于我想在每次收到新的传感器数据时运行此计算,Android 为我提供了哪些选项?
我尝试过使用AsyncTask。我将启动一个 AsyncTask 以使用新的传感器数据运行计算,并且 View 的更新方法将在其 onPostExecute 中被调用。
不幸的是,这种方法在动画同步方面产生了问题:AsyncTask 可能会在下一个之后完成,并且 View 的更新将被调用 outdated 信息,从而有效地使其动画抖动。
我还尝试使用executeOnExecutor 运行相同的 AsyncTask,将单线程执行程序传递给它,但这并没有阻止动画抖动。
最后,我尝试在 MainActivity 中运行带有 ResultReceiver 回调的IntentService。虽然我能够让它运行,但它只运行一次。
我是否误解了 IntentServices 的用途?我似乎无法多次运行它(使用一种创建带有额外参数的意图并使用它调用startService 的方法)。
总结:我有一个对传感器数据进行操作的慢速方法。我想在每次获得新的传感器数据时在后台运行它,并使用它的结果/响应来更新视图。
有什么建议吗?
【问题讨论】:
-
使用 Rx java 它的工作方式与异步任务相同,而且效果更好
标签: java android multithreading android-asynctask android-service