java - 使用 ProgressDialog 进行 IntentService 操作?

标签 java android

我已经实现了由 Activity 通过 IntentService 发起的网络操作。

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

问题在于,ProgressBar 有一个 Activity 的句柄,它与 Activity 强耦合,如果在操作过程中更改屏幕方向,则会导致问题。

如果 Activity A 启动 IntentService B,我可以在后面引入一个 ProgressDialog。但是如果在调用我的接收器之前(在网络操作完成之前),方向发生变化;我最终将得到对 ProgressDialog 的孤立引用,因此无法将其关闭。

有什么建议吗?

最佳答案

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

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

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

关于java - 使用 ProgressDialog 进行 IntentService 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18924385/

相关文章:

java - Intellij regex String用方法参数替换类声明的新实例

java - sun.net.httpserver 写入流的字节太多

java - 如何在 spring hibernate 中将值列表插入数据表

java - 从sqlite数据库Android检索数据时捕获异常

android - 有时,当添加到处理程序内部时,Toast 在 Activity 或内部 fragment 中不可见

android - Nexus 7 Spinners 太大

java - mongodb 中的日期不正确

java - 使用 TIKA 提取 url 的内容(文本)

Android JellyBean BigTextStyle 通知不工作 - HTC One X AT&T

java - Android - 将子集合中的所有文档作为对象查询 - Firestore 实时数据库