【发布时间】:2012-05-05 00:08:51
【问题描述】:
在 Activity 中,我正在创建一个处理程序,以每 45 秒触发一次 AsyncTask,以刷新 ListView 的 DataAdapter 的内容。 AsyncTask 工作得很好,并通过 ProgressUpdates 和 Toast 消息让用户了解进度。
由于线程的 doInBackground 是触发后忘记且不可重复使用的,因此我必须从我的 Hander 创建一个 AsyncTask 的新实例,该实例每 45 秒触发一次。问题是当屏幕旋转时,我收到并发消息,因为重新创建了 Hander 并创建了 AsyncTask 的新实例,因此通过 ProgressUpdates 和 Toast 消息的友好用户进度是压倒性的,并且使得使用 ListView 变得困难。
请不要将此作为解决方案:android:screenOrientation="portrait" 不是一个选项。
对于必须如此频繁运行的东西,我应该只使用自定义线程而不是 AsyncTask 类吗? ToDo:未显示,我必须稍后从传感器的 onSensorChanged 事件更新适配器以更新 ListView 中每个位置的方位,我打算在单独的 AsyncTask 类上运行它,因为我不需要每次都通知用户设备方位发生了变化。
既然 AsyncThread 不能被重用,我做错了吗?简而言之,让 Activity 刷新 ListView 并在这样做时远离 UI 线程的最佳方法是什么?
【问题讨论】:
-
您能告诉我们您的活动的 onCreate() 和 onStart() 方法吗?
标签: android android-listview android-asynctask