Android 用户通知需要上下文
为了通知用户,我使用AlertDialog或Snanckbar。它们都需要活动上下文才能显示。三个案例:Android 用户通知需要上下文,android,android-context,Android,Android Context,为了通知用户,我使用AlertDialog或Snanckbar。它们都需要活动上下文才能显示。三个案例: 从当前活动生成的消息:这是微不足道的 从另一个线程生成的消息:我正在实现一个广播/接收器模式,以便线程可以广播消息,活动接收并显示消息 关闭活动生成的消息,例如活动主控启动活动选择器,用户选择一个选项,代码执行一些操作,然后返回主控 // Selector activity draft sample mButtonSeelcted.setOnClickListener(new OnClic
- 从当前活动生成的消息:这是微不足道的
- 从另一个线程生成的消息:我正在实现一个广播/接收器模式,以便线程可以广播消息,活动接收并显示消息
- 关闭活动生成的消息,例如活动主控启动活动选择器,用户选择一个选项,代码执行一些操作,然后返回主控
// Selector activity draft sample mButtonSeelcted.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { super.onClick(view); doMagicForSelected(); mContext.sendBroadcast(intentForUserMessage); mContext.startActivity(intentToMasterActivity); } });
LocalBroadcastManager
,greenrobot的事件总线)。使用系统广播不仅会浪费CPU和电池,还会带来安全问题(例如,任何应用程序都可能监视您的消息)
有没有我遗漏的模式
在第三个场景中,“主活动”负责显示此信息,而不是正在销毁的活动。因此,将信息添加到传递给
startActivity()
的Intent
中,告诉“主活动”显示该信息。感谢性能/安全提示:)如果doMagicGorSelected方法获得可向用户广播的验证(例如网络问题),则它将广播该消息。这种方法不知道主人的情况。我想我的重点是,我应该如何处理上下文不稳定且在使用时可以销毁/更改的事实。@denispyr:“我想我的重点是,我应该如何处理上下文不稳定且在使用时可以销毁/更改的事实”——如果主控器是显示对话框或snackbar的主控器,那么就没有波动,所以我不理解这种担忧。让我澄清一下。关于我的草稿代码,如果'doMagicForSelected()得到一个“可显示”的异常(例如错误输入),它将广播该消息。选择器活动将接收它并显示一个对话框。如果这是在onLoadFinished期间发生的,则不会出现问题,对话框将显示。如果它发生在活动结束之前,那么我就有麻烦了。这个案例有什么模式可以遵循吗?@denispyr:最有可能的答案是“不要显示错误”。有一些关于活动的方法,例如isDestroyed()
和isFinishing()
,可以用来帮助检测此问题。或者,更好的方法是,当您切换到事件总线时,只在您能够对事件进行操作时才关注事件(例如,在onStart()
中注册事件,在onStop()
中注销事件)。我确实使用onResume/onPause来注册/注销事件。我将尝试您建议的isXxx方法,并可能重构代码。谢谢。