在 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 线程的最佳方法是什么?