gpt4 book ai didi

android - 带对话框的 BroadcastReceiver 上下文

转载 作者:行者123 更新时间:2023-11-30 02:03:01 28 4
gpt4 key购买 nike

我正在努力实现以下目标

  1. Activity 启动后台任务 (SyncAdapter) 并显示对话框。
  2. 后台任务发送广播。
  3. 这些广播应该被对话拦截。

我期望的是:

Dialog           Broadcast
<-------------------
OK!
<-------------------
OK!

....

<-------------------
OK!

但我得到的是:

Dialog           Broadcast
<-------------------
<-------------------

....

<-------------------

(dialog dismiss)

OK!
OK!

....
OK!

如图所示,广播被正确发送,但只有在对话框关闭后才能接收到。我想在显示对话框时收到它们。换句话说,步骤 1 和 2 工作正常,但 3. 部分工作。我认为可能的问题是我没有为 BroadcastReceiver 使用正确的上下文。

所以我的问题是:我应该使用哪个上下文来订阅更新(即接收广播,而不是发送它们),以便它们可以在对话框显示时被拾取?

我已经尝试使用 Activity.thisActivity.this.getBaseContext()Activity.this.getApplicationContext()dialog.getContext(), DialogFragment.getActivity() 无济于事。

澄清一下:我已经多次使用 BroadcastReceiver 模式,只是在将它与对话框一起使用时遇到了问题。

最佳答案

事实:

  • Activity (A) 显示对话 (D)
  • 名为 BACKGROUND TASK (T) 的未知类型(SOMETHING)
  • (T) 向广播接收器 (R) 发送广播
  • (R) 应该驳回 (D)

问题:

  • (T) 你是说 CLASS DERIVED from AbstractThreadedSyncAdapter 吗?
  • 您是否以某种方式在 (T) 开始后完成 (A) 并展示 (D)?

结论:

  • 无论您做什么,如果您的 (A) 创建并显示 (D) 它负责解雇 (D) 并在进入 onStop() 状态之前执行此操作
  • 换句话说,如果 activity 会在没有关闭对话的情况下终止,你会得到
android.view.WindowLeaked exception will be thrown.
  • & 当您尝试操作对话框时,您将得到:
java.lang.IllegalArgumentException: View not attached to window manager
您问题的

第二部分,涉及上下文

  • 您始终可以通过方法检查哪个上下文分配给 Dialog
Dialog.getContext()
  • 用它来匹配其他上下文
Dialog.getContext().equals(Context);
  • 你也可以使用类方法
Class.isAssignableFrom(Class<?> c)
  • 如果您想将上下文与类匹配(例如您使用的 Activity)
MyActivity.class.isAssignableFrom(ObjectToMatch.getClass());

我会忘记添加:

您可以随时使用应用程序上下文开始对话:)

还有一件事:

任何涉及 UI 的东西都应该在 UI THREAD 上完成,以防你忘记并得到

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

编辑:

我没有看到任何问题:可行的解决方案

THREAD CALLING RECEIVER

关于android - 带对话框的 BroadcastReceiver 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31186540/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com