0

我一直在通过 IntentService 的活动发起网络操作。

但是,在下载操作期间,我想通过 ProgressDialog 来阻止 UI。

问题是 ProgressBar 有一个活动句柄,它与它强耦合,如果在操作过程中改变屏幕的方向,这会导致问题。

如果 Activity A 启动 IntentService B,我可以在之后立即引入 ProgressDialog。但是如果在我的接收者被调用之前(网络操作完成之前),方向就会改变;我最终将获得对 ProgressDialog 的孤立引用,因此无法将其关闭。

有什么建议么 ?

4

2 回答 2

2
  1. 我认为您的意思并不是“阻止用户界面”;我认为您的意思是“设置一个不确定的活动指示器并忽略输入,直到完成某些操作”。
  2. 如果是这样,请在您的 UI 中使用 ProgressBar 小部件。从小部件的 android:visibility="GONE" 开始。当您开始后台工作时,设置 android:visibility="VISIBLE" 并禁用您想要阻止的 UI 控件。后台工作完成后,反转一切。
  3. 要在后台工作完成后返回 Activity,请实现两个选项:将内容 Intent 通知到您的 Activity,以及使用接收器为您的 Activity 广播 Intent。如果您的活动在后台,则会出现通知,通过单击它,用户将返回到您的活动。如果您的 Activity 在前台,请在 onReceive() 中获取广播 Intent。无论哪种方式,提醒用户后台工作已完成(并关闭通知)。
  4. 使用 onPause() 和 onResume() 通过保存或恢复可见性和启用/禁用设置来维护 UI 状态。

这样做,当 IntentService 运行时,你的 Activity 发生了什么并不重要。

您还应该查看 Android 培训课程Transferring Data without Draining the Battery。它将帮助您进行高效、用户友好的网络操作。还有很多关于在移动设备上正确使用网络的其他提示。

于 2013-09-20T23:35:00.400 回答
1

您可能想要做的是在进度条出现时暂时禁用然后重新启用 Activity 的方向更改。这可以通过设置适当的标志来完成。

我不记得具体细节,但找到了一个包含以下信息的快速链接:

临时启用/禁用方向更改

于 2013-09-20T20:48:29.400 回答