Android 带对话框的广播接收器上下文
我正在努力实现以下目标Android 带对话框的广播接收器上下文,android,android-alertdialog,Android,Android Alertdialog,我正在努力实现以下目标 活动启动后台任务(SyncAdapter)并显示对话框 后台任务发送广播 这些广播应该被对话框截获 我所期望的是: Dialog Broadcast <------------------- OK! <------------------- OK! .... <------------------- OK! Dialog Broadcast <----------
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();}是,但是,我应该使用哪个上下文来订阅更新?ThisThis.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.