Android 带对话框的广播接收器上下文

Android 带对话框的广播接收器上下文,android,android-alertdialog,Android,Android Alertdialog,我正在努力实现以下目标 活动启动后台任务(SyncAdapter)并显示对话框 后台任务发送广播 这些广播应该被对话框截获 我所期望的是: Dialog Broadcast <------------------- OK! <------------------- OK! .... <------------------- OK! Dialog Broadcast <----------

我正在努力实现以下目标

  • 活动启动后台任务(SyncAdapter)并显示对话框
  • 后台任务发送广播

  • 这些广播应该被对话框截获
  • 我所期望的是:

    Dialog           Broadcast
      <-------------------
     OK!
      <-------------------
     OK!
    
             ....
    
      <-------------------
     OK!
    
    Dialog           Broadcast
      <-------------------
      <-------------------
    
             ....
    
      <-------------------
    
        (dialog dismiss)
    
     OK!
     OK!
    
             ....
     OK!
    
    对话广播
    
    这是一个
    BroadcastReceiver
    ,您可以根据自己的代码对其进行调整。不要使用
    Activity.this
    Activity.this.getBaseContext()
    Activity.this.getApplicationContext()
    您应该像这样使用
    Context

    class BroadCastReceiverTest extends BroadcastReceiver {
    Context context;
    public void onReceive(Context c, Intent intent) {
        this.context = c;
    
    }
    

    现在您必须使用
    this.context
    作为
    上下文

    事实:

    • 活动(A)显示对话框(D)
    • 命名为后台任务(T)的(某物)的未知类型
    • (T) 将广播发送到广播接收器(R)
    • (R) 应解雇(D)
    问题:

    • (T) 您是指从AbstractThreadedSyncAdapter派生的类吗
    • 你会在(T)和(D)开始后以某种方式完成(A)吗
    结论:

    • 不管你做什么,如果你的(A)创建并显示(D),它有责任解除(D)&在进入onStop()状态之前完成它
    • 换言之,如果活动将在未取消对话框的情况下停止,您将获得
    • &当您尝试操纵对话框时,您将得到:
    问题的第二部分,涉及背景

    • 您始终可以通过方法检查分配给对话框的上下文
    • 使用它来匹配其他上下文
    • 你也可以使用Class方法
    我会忘记补充:

    您始终可以使用应用程序上下文启动对话框:)

    &还有一件事:

    任何涉及UI的事情都应该在UI线程上完成,以防您忘记和忘记

    编辑:

    我看不出任何问题:工作解决方案


    试试奥托

    根据文件

    一个增强的基于Guava的事件总线,强调对Android的支持

    Otto是一个事件总线,设计用于解耦您的系统的不同部分 应用程序,同时仍然允许他们高效地通信

    从番石榴分叉,奥托增加了独特的功能,以一个已经存在 改进了事件总线,并将其专门用于Android平台


    是的,这就是我所说的
    活动
    ,将进行相应的编辑。“这些广播应该被对话拦截。”应该是“这些广播应该被活动拦截,而不是取消对话”?或者请指定您要用于的
    上下文
    ?您正在运行发送广播的服务吗?AlarmManager?我正在通过SyncAdapter发送它们,所以您正在尝试找出用于此的上下文:公共SyncAdapter(上下文上下文,布尔自动初始化){super(上下文,自动初始化);mContentResolver=context.getContentResolver();}是,但是,我应该使用哪个上下文来订阅更新?This
    This.context
    正如我所说的,这没有意义,我只能在收到广播时访问该上下文。所以你的建议是第二十二条军规。问题1:是的。问题2:不,活动在整个过程中始终可见。@jlhonora您确定吗?你喜欢伐木吗?是否要接收来自应用程序外部的广播。?还是在?是的,全部记录。在应用程序中。我知道,这很奇怪。就在对话框被取消的时候,我突然收到了广播。那么你到底想实现什么呢?在对话框显示的同时接收广播,而不是在对话框被取消之后。天哪,你需要它做什么?有一个小故事,它的行为发生在活动线程(又称UI线程)kingtom-嗨,我是强力活套)
    android.view.WindowLeaked exception will be thrown.
    
    java.lang.IllegalArgumentException: View not attached to window manager
    
    Dialog.getContext()
    
    Dialog.getContext().equals(Context);
    
    Class.isAssignableFrom(Class<?> c)
    
    MyActivity.class.isAssignableFrom(ObjectToMatch.getClass());
    
    android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.