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

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(使用前将#替换为@)

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

  • 仅使用 Context 而不是 Activity 实例显示对话框

    如果我使用 Activity 实例 我可以显示对话框 但当我使用上下文或应用程序上下文实例时 对话框不会显示 AlertDialog Builder builder new AlertDialog Builder activity buil
  • layout_constrainedWidth 无法正常工作

    我的 ConstraintLayout 中有 EditText 和 TextView TextView显示EditText的内容 输入时 我需要 EditText 展开直到屏幕中间 而 TextView 跟随它并填充后半部分 我将指导方针设
  • 整个应用程序中的全局“搜索功能”

    在我的整个应用程序中 我希望搜索按钮执行单独的操作Activity 即 当我按下搜索按钮时 从应用程序中的任何位置调用一个单独的活动 有什么方法可以代替定义onSearchRequested 在每项活动中 我只是在一个地方配置它 例如Man
  • 如何从 WifiP2pDeviceList 获取 wifi direct 设备名称

    我想在执行请求对等点时获取 wi fi direct 名称 这是我的代码 if WifiP2pManager WIFI P2P PEERS CHANGED ACTION equals action Log d tag success dis
  • 如何从 Cursor 获取行 ID

    如何从游标获取行 ID 我不认为 Cursor 直接暴露了这一点 SQLiteDatabase insert 返回新插入行的行 ID 或者在 Android 中 惯例是有一个名为 id 包含表的主自动增量键 所以cursor getLong
  • 任务执行失败 程序类型已存在

    我将这个新库包含到我的依赖项中 compile com github Triggertrap SeekArc v1 1 然后当我构建时出现构建错误 Error Exception in thread queued resource proc
  • 无法实例化接收器 com.parse.GcmBroadcastReceiver

    我正在编写一个使用 GCM 通知和解析推送的离子应用程序 这个应用程序正在使用这些插件 com ionic keyboard 1 0 3 Keyboard com phonegap plugins PushPlugin 2 4 0 Push
  • 在 doInBackground AsyncTask Android 中传递更多值

    如何传递更多的值doInBackground My AsyncTask看起来像这样 private class DownloadFile extends AsyncTask
  • 屏幕滚动时 GridView 内的项目会重复

    我使用 GridView 来显示一组用户可以选择的类别 网格的每个项目都由一个 ImageView 和一个 TextView 组成 两者都是从服务器检索的 当触摸一个项目时 另一个活动就会启动 我以为一切都很顺利 直到我注意到当我滚动屏幕时
  • 在 Marshmallow 中获取蓝牙本地 mac 地址

    在 Marshmallow 之前 我的应用程序将通过以下方式获取其设备 MAC 地址BluetoothAdapter getDefaultAdapter getAddress 现在 随着 Marshmallow Android 的回归02
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI
  • 动态选取框文本

    是否可以将列表视图的 java 编码中的文本添加到 Android 中的选取框滚动中 如果可以 请告诉我如何做 如果需要 我将发布使用的代码 这是列表视图使用的 XML 如下
  • 开始使用 Honeycomb 进行 Android 开发 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在哪里可以获得用于导入 libcore.io 的 JAR?

    我想处理一个GaiException在我的应用程序中 调试器告诉我 它位于 libcore io 包中 但导入它会产生错误 我想我需要向我的项目添加一个额外的 JAR 才能正确解析此类型 我在我的 android sdk 文件夹中进行了一些
  • 如何使用百分比进行android布局?

    我们如何使用百分比android视图元素的值 像这样的东西
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • 使用 qbs 构建 qt 应用程序

    我想知道在 Linux 上使用 qbs 编译 构建和创建 Android Qt 应用程序的步骤 我拥有所有必要的工具 目前我可以使用 qmake 创建 apk Qbs 目前不支持构建 Qt Android 应用程序 Qbs v1 4 中引入
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • Fragment 的 onSaveInstanceState() 永远不会被调用

    我试图将数据保存在片段的 onSaveInstanceState 中 但该方法从未被调用 有人可以帮忙吗 public class MyFragment extends Fragment Override public View onCre

随机推荐

  • 使用 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 类中是一个不好的做法吗 它会导致大量内存泄漏吗 这