保存应用程序上下文实例是一个不好的做法吗?

2023-11-26

根据我的理解,Android 中的应用程序是一个单例(如果我错了,请纠正我),并且我们始终只有一个应用程序上下文实例。

那么,从这个角度来看,将应用程序上下文保存在我的 Application 类中是一个不好的做法吗? 它会导致大量内存泄漏吗?

这是一个例子:

public class MyApp extends Application {
    private static Context appContext = null; // <-- here is the thing!

    @Override
    public void onCreate() {
        appContext = this;
    }

    public static Context getApplicationContextSingleton () {
        return MyApp.appContext;
    }
}

这样做的原因是全局访问的类,例如 PreferencesManager,大多数具有静态方法,并且始终需要上下文。因此,我考虑存储应用程序上下文,而不是每次都传递它(或者甚至将其存储在实例中,这可能很糟糕)。我没有看到的缺点是什么?


将应用程序上下文保存在我的应用程序类中是一个不好的做法吗?

这是一种代码味道。

它会导致大量内存泄漏吗?

拥有静态数据成员不会导致大量内存泄漏。您是否过度使用Application对象是否会导致大量内存泄漏取决于您在何处以及如何使用它。

我没有看到的缺点是什么?

Not all Contexts 生而平等。一般来说,只使用Application当你知道具体为什么你需要Application context,并不适用于所有情况。

DoubleEncore 的 Dave Smith 有一个很棒的博客文章涵盖类型之间的差异Context以及何时使用其中一种而不是另一种。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保存应用程序上下文实例是一个不好的做法吗? 的相关文章

  • ACTION_VIEW 的 Intent.createChooser 仅显示默认浏览器

    我正在尝试使用 Intent createChooser 显示应用程序选择器对话框 该对话框将列出用户手机中所有可用的网络浏览器 我正在使用下面的代码 Intent browserIntent new Intent Intent ACTIO
  • 合并两个位图图像(并排)

    任何人都可以帮助将两个位图图像合并为单个位图 在android中 并排 谢谢 尤瓦拉吉 您可以使用Canvas 查看这篇文章 http www jondev net articles Combining 2 Images in Androi
  • 在 Android 中的活动、服务和应用程序之间传递变量

    有人可以给我提供以下活动 服务 应用程序组合的示例吗 我拥有这三个 但我已经把我的应用程序弄得一团糟 试图在这个地方传递一堆变量 现在我不知道发生了什么 请注意 我是 Android 新手 最近我一直在努力解决这个问题 因为有很多方法可以实
  • 更改工具栏中汉堡图标的大小?

    我有两个问题 可能很奇怪 但无论如何 我有带有应用程序标题的工具栏 如何将其更改为非徽标的图片 下一个问题 是否可以设置 更改工具栏中汉堡图标的大小 我在下面的下一个代码的帮助下制作了经典的导航抽屉 我也使用了 ActionBarDrawe
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • 如何编辑 gradle 依赖项

    我正在开发一个 android 项目 该项目在我的 gradle 文件中使用以下依赖项 compile com mapzen on the road 1 1 1 我想编辑其中一个文件 以添加一些缺少的功能并为该项目做出贡献 如何下载该项目并
  • 无法合并 Dex - Android Studio 3.0

    当我在稳定频道中将 Android Studio 更新到 3 0 并运行该项目时 我开始收到以下错误 Error Execution failed for task app transformDexArchiveWithExternalLi
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • 在事件聚合器中混合枚举与事件类

    我最近尝试实现自己的简单事件聚合器 我从 MSDN 上的事件聚合器文章中获得了很多灵感 关于 MSDN 上的事件聚合器 我注意到一件事是事件实际上是它们自己的类 这根本不是一件坏事 然而 我只是觉得总是为每个小事件创建一个新的空类很尴尬 我
  • Android 手机应用意图

    我想在手机上启动手机应用程序作为意图 我正在使用这个代码 startActivity getPackageManager getLaunchIntentForPackage com android phone 但该函数抛出一个空指针异常 因
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • 如何在 Android 上的 HttpPost 中发送 unicode 字符

    我试图在我的应用程序中允许多语言支持 这会发出 HTTP post 来上传新消息 我需要做什么才能支持日语和其他非拉丁语语言 我的代码目前看起来像这样 note the msg string is a JSON message by the
  • onTouchEvent()中如何区分移动和点击?

    在我的应用程序中 我需要处理移动和单击事件 一次点击是由一个 ACTION DOWN 操作 多个 ACTION MOVE 操作和一个 ACTION UP 操作组成的序列 理论上 如果您收到 ACTION DOWN 事件 然后收到 ACTIO
  • 如何在android中录制音频时暂停背景音乐

    我正在 Android 中开发一个音频记录应用程序 因此 如果设备音乐播放器中已播放任何背景音乐 则应在开始录制之前暂停该背景音乐 并且每当录制停止或暂停时 背景音乐都应恢复 播放录制的音频时也应该如此 有人可以帮我解决这个问题吗 提前致谢
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • 按名称查找视图

    是否可以通过名称而不是 id 来查找视图 findViewById R id someView 但我想做这样的事情 findViewByName someView 在处理 xml 时 您必须通过标识符查找视图 但是您可以使用以下方式查找标识
  • ormlite 将日期读取为 'yyyy-MM-dd'

    我需要读取给我的 sqlite 数据库 因此我无法更改表中的日期格式 yyyy MM dd 当我尝试使用 ormlite 为我生成对象时 使用以下注释 DatabaseField columnName REVISION DATE dataT
  • gradle-experimental:0.1.0 buildConfigField

    谁知道怎么定义buildConfigField在实验性的 gradle 插件中 android productFlavors create demo applicationId com anthonymandra rawdroid buil
  • 绘制大位图时 nSyncAndDrawFrame 速度极慢

    我想用多个大位图优化视差滚动视图 在我的 Nexus 5 上 一切都很顺利 Traceview 转储如下所示 doFrame 方法大约需要 18 毫秒才能完成 但是 当使用我的 Nexus 7 或 Android 6 模拟器 Genymot

随机推荐

  • 使用 Google 进行 WPF 应用程序身份验证

    我发现了许多不同的 OAuth 解决方案以及一些库或纯请求 https github com googlesamples oauth apps for windows 然而 没有一个解决方案看起来像我真正需要的 目前 我的应用程序使用自己的
  • Durandal 2.0 - 用于嵌套菜单的子路由器?

    我正在构建一个应用程序 并希望显示一个 2 层菜单 并且两层始终可用 杜兰达尔2 0介绍了他们的新路由器 它支持 子路由器 可以更轻松地进行深度链接 我的问题 我可以永久加载我的 子 导航路线 并在父级不活动时呈现子菜单 还是 子路由器 设
  • 无空格黑白文本的正则表达式

    请告诉我如何检查正则表达式文本之间没有空格 如果您的意思是 检查字符串中是否有空格的正则表达式是什么 则以下模式将起作用 S 这将找到仅包含非空格 空格 换行符 制表符等 的任何字符串
  • 查找 List 中出现次数最多的数字

    有没有一种快速又好的使用 linq 的方法 怎么样 var most list GroupBy i gt i OrderByDescending grp gt grp Count Select grp gt grp Key First 或者
  • SliverAppBar(Flutter)中的最小高度?

    是否可以在 SliverAppBar 折叠时设置最小高度 如果是 我该怎么做 工作是在 SliverAppBar 中添加一个底部小部件 底部 首选尺寸 首选尺寸 尺寸 20 0 20 0 孩子 文本 这个问题的答案既是肯定的 也是否定的 如
  • 如何从MySQL中的select中删除?

    此代码不适用于 MySQL 5 0 如何重写它以使其工作 DELETE FROM posts where id SELECT id FROM posts GROUP BY id HAVING COUNT id gt 1 我想删除没有唯一 I
  • 嘲笑单例类

    我最近读到 创建一个类单例使得无法模拟该类的对象 这使得测试其客户端变得困难 我无法立即理解根本原因 有人可以解释一下是什么使得无法模拟单例类吗 另外 与创建类单例相关的还有其他问题吗 当然 我可以写类似的东西不要使用单例 它们是邪恶的 使
  • 一项工作中的错误会通过 mclapply 污染其他工作

    When mclapply X FUN 遇到某些值错误X 错误会传播到其他一些 但不是全部 值X require parallel test lt function x if x 3 stop else x mclapply 1 3 tes
  • 在 StringComparison 和 StringComparer 之间转换的优雅方式?

    一些 NET 方法使用字符串比较作为参数 有些使用字符串比较器 通常以以下形式比较器 差异是显而易见的 有没有一些优雅的方式如何获得字符串比较 from 字符串比较器或相反亦然 我总是可以编写使用的简单方法Case声明 但也许 NET 中已
  • React 组件中出现意外的标记“=”[重复]

    这个问题在这里已经有答案了 我可能缺少装载机吗 我认为我们应该能够在组件体中使用这些 ES6 函数 以避免必须执行 bind this syntax 反应文档 ERROR in client admin side components Fo
  • 用于可视化数学方程的库(如方程编辑器)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个 C 库 它将为我提供方程编辑器功能 我不是在寻找数学库来评估数学表达式 有什么建议么 我建议使用我的 WPF Math 分支 我已经
  • setTimeout()和设置参数

    我有一些 jQuery 代码 如下所示 mainNav2 gt li mouseleave function var someNum Math random this attr id someNum var t setTimeout Hid
  • div 上的滚动条带有溢出:自动和百分比高度

    是否可以创建一个可以根据浏览器大小进行调整并且可以滚动的 div 我想用overflow auto关于 div 和百分比高度90 页面的结构是 div style height 100 headerinfo div div style he
  • 如何更改 iOS 自动更正建议的颜色?

    经过在这里 网络和开发者论坛上的大量搜索后 我不敢相信以前似乎没有人问过这个问题 无论 UITextField 或 UITextView 或其他任何内容的颜色如何 iOS 自动更正建议始终会以白色背景上的蓝色字体弹出 有时这看起来很糟糕 例
  • 从多维数组中删除重复的元素对

    我有一个看起来像这样的数组 1 coordinates 16 343345 35 123523 2 14 325423 34 632723 3 15 231512 35 426914 4 16 343345 35 123523 5 15 2
  • php 将日期时间转换为 UTC

    我需要一种简单的方法将日期时间戳转换为 UTC 从服务器所在的任何时区 希望不使用任何库 Use 斯特托时间从给定字符串 解释为本地时间 生成时间戳并使用gmdate将其作为格式化的 UTC 日期返回 Example 根据要求 这是一个简单
  • 如何在 Electron 应用程序中嵌入 mac 应用程序扩展?

    我正在尝试嵌入一个Finder 同步扩展在我的应用程序中用 Swift 编写Electron 我怎样才能让他们一起工作并相互沟通 我读过苹果文档但它只解释了如何将目标添加到本机应用程序 我还注意到我可以手动注入 appex应用程序中的编译文
  • 是否有任何谈论数字文字后缀的 C++ 风格指南?

    在我读过的所有 C 风格指南中 我从未见过任何有关数字文字后缀的信息 即3 14f 0L ETC 问题 是否有任何风格指南谈论其用法 或者是否有通用约定 我偶尔会遇到f图形编程中的后缀 编程领域类型的使用有什么趋势吗 我所知道的唯一已建立的
  • 我的 Google Apps 脚本如何由与工作表共享的其他人运行?

    我有一个非常适合我的 Google Apps 脚本 与该工作表共享的其他尝试使用它的人会收到以下消息 您无权执行该操作 请问楼主 此项目授予您访问权限 该脚本用于使用新数据行更新现有工作表 它是使用添加到 UI 的菜单项触发的 并执行以下操
  • 保存应用程序上下文实例是一个不好的做法吗?

    根据我的理解 Android 中的应用程序是一个单例 如果我错了 请纠正我 并且我们始终只有一个应用程序上下文实例 那么 从这个角度来看 将应用程序上下文保存在我的 Application 类中是一个不好的做法吗 它会导致大量内存泄漏吗 这