android - 将 ApplicationContext 用于对话框是否安全?

标签 android android-fragments fragment

我正在运行一个应用程序,该应用程序从 Fragment 中生成对话警报作为网络回调。这需要你传入一个可用的Context引用;因为我使用的是 Fragment,所以我使用 getActivity()。由于回调的网络依赖性,getActivity() 可以 sometimes return null .这会使我的代码崩溃。

要解决此错误,我希望改为向对话框提供 ApplicationContextpersists for the lifetime 是一个单例的应用程序,所以我知道它不会被撤回。此外,Dialog 的内容是关于支付确认的,所以我认为它在与某个Window 没有严格关系的情况下有合理的显示范围。

这是一个安全的实现方式吗?我是否在避免不可避免的情况,并且应该完全转向更稳健的模式?

最佳答案

Is this a safe implementation?

恕我直言,不。

从策略上讲,我希望您的应用程序在某些情况下崩溃(例如,您的应用程序在网络 I/O 完成时处于后台),并且我希望您的对话框不一定遵循适当的主题。由于您的“对话”似乎与 Activity 无关,因此它应该是一个 Activity ,以对话为主题的 Activity 形式。这解决了您的可靠性问题和主题问题,但如果您的网络 I/O 花费的时间比您预期的要长,您仍然有可能在用户使用其他应用程序时显示对话框(主题 Activity )。

从策略上讲,您似乎关心网络 I/O 的结果,而不管应用的 UI 层中发生了什么。在那种情况下,您的应用程序的 UI 层不应该是直接接收网络 I/O 结果的层,感觉您的 fragment 现在正在这样做。使用与 UI 分离的东西(IntentServiceJobService、裸线程、ThreadPoolExecutor)来管理网络 I/O。让它使用一个事件总线(LocalBroadcastManager,greenrobot的EventBus)来告诉UI层网络I/O完成,如果UI层没有响应事件(因为在后台)并且您只关注 UI 可见时的事件),引发 Notification 或做一些其他微妙的事情让用户知道结果。

关于android - 将 ApplicationContext 用于对话框是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44328669/

相关文章:

java - 启动 map Activity 的正确方法?

android - 我的 fragment 没有附加到主 Activity 类。

android - GCM 网络管理器 - 定期任务未触发

Android Navigation 全局操作覆盖之前的 fragment

android - 替换 fragment 仍然可见

android - 无法将空值注入(inject)类

android - 从 Android Fragment 中的图库中选择图片

java - 均衡另一个应用程序的音频 - 如何做?

android - 在 Nativescript 应用中设置受支持的最低 Android 版本。

android - 没有抛出 NullPointerException