Android:保存应用程序单例类中存储的数据的最佳方法

2023-11-27

保存 Android 应用程序的应用程序类(单例)中存储的数据的最佳方法是什么?

我有一个安静的大应用程序,可以在活动之间共享大量数据。所以大部分都存储在Application Singleton上。

一切都很好.. util应用程序被操作系统在内存不足时杀死...然后当它回来时,它尝试恢复活动但没有成功,因为应用程序之前缺乏必要的数据。

由于缺乏一种非常受赞赏(和需要)的方法来根据您的经验在应用程序上保存数据,最好的方法是什么?

除了“普通”字符串、布尔值等之外,我还可以保存诸如位图之类的东西吗?

我已经看过这个了Android中如何声明全局变量?但问题并不集中在这种情况下重要的是什么,当应用程序因内存不足而被终止时如何保存数据......


与许多问题一样,没有简单的答案。保存数据的方法有很多种,每种方法都有优点和缺点。“最佳”方法将取决于您的特定需求。您在这里拥有所有选择:http://developer.android.com/guide/topics/data/data-storage.html

  • 对于一些小的位图,您可以对它们进行编码并将它们存储在共享首选项.
  • For more and bigger images, you have two options
    1. 中的 Blob 列database
    2. 将它们作为文件存储在您的内部存储器,并将链接保留在您的首选项中。

共享首选项存储字符串,因此可以存储任何字符串,包括任何序列化/编码对象。根据这个帖子,SharedPreferences 中的序列化字符串没有硬编码的大小限制,而是基于字符串大小限制。尽管如此,这另一篇文章指出整个 SharedPreferences 对象被编写为单个 xml 文件,因此您应该尝试将其大小保持在最小。

JSON 对象(或按照 katit 建议使用 GSON)是一个很好的轻量级选项,但我采取的方法是将它们保存到内部数据存储(除非数据非常大,即很多兆字节,并且您更喜欢外部存储)并仅将链接保留在 SharedPreferences 中。我不知道你的对象是什么样的,但如果它们可以简化为一堆更简单的组件,你可以考虑为它们建立一个数据库(即每个对象一行,每个字段一列,可能包括一些斑点) 。

The 文件与数据库方法还取决于您计划访问这些对象的次数。如果它们只会被读取一两次然后就消失,那么我会选择文件而不是数据库及其游标的麻烦。如果有很多读取,并且也许您需要使用查询进行更快的搜索,我会选择数据库。

另请查看这篇文章:http://android-developers.blogspot.in/2009/02/faster-screen-orientation-change.html对于特定于活动的选项。

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

Android:保存应用程序单例类中存储的数据的最佳方法 的相关文章

  • 如何获取之前的碎片?

    为了在我的应用程序中重用某些片段 我需要知道哪个片段是返回堆栈上的第二个片段 为了做到这一点 我正在使用getFragmentManager getFragments 显示以下错误 但有效 FragmentManager getFragme
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • FTS3 在 ORMLite 中搜索?

    我对 FTS3 一无所知 除了http developer android com guide topics search search dialog html http developer android com guide topics
  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • 播放 SoundCloud 曲目

    我可以在 Android 应用程序中播放 SoundCloud 中的曲目吗 我正在尝试这段代码 但它不起作用 String res https api soundcloud com tracks 84973999 stream client
  • 如何在android线性布局上获得阴影? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在android中为View设置阴影 https stackoverflow com questions 4406524 how to set shadow to a view in androi
  • glTexImage2D: 之前出错:( 0x506 内部 0x1908 格式 0x1908 类型 0x1401

    当使用 Android Studio 运行模拟器时 我在模拟器屏幕上看不到任何内容 一切都是黑色的 我得到以下事件日志 模拟器 glTexImage2D 出错了 0x506 内部 0x1908 格式 0x1908 类型 0x1401 我已经
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • 如何在 Android 模块中使用 FirebaseAuth

    我正在开发一个聊天库 我想在其中显示登录用户的对话 制作该库的原因是我想将其集成到多个项目中 我现在面临的问题是FirebaseAuth表示用户尚未登录 FirebaseAuth getInstance mFirebaseApp getCu
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Android:滚动 Horizo​​ntalScrollView 时如何禁用 ScrollView 的垂直滚动?

    我正在开发一个带有带有 ScrollView 的 Activity 的 Android 应用程序 其中包含 Horizo ntalScrollView 等内容 当我触摸 Horizo ntalScrollView 时 我想禁用外部 Scro
  • Android 相机未保存在特定文件夹 [MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA]

    当我在 Intent 中使用 MediaStore INTENT ACTION STILL IMAGE CAMERA 时遇到问题 相机正常启动 但它不会将文件保存在我的特定文件夹 photo 中 但是当我使用 MediaStore ACTI
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组

随机推荐

  • Java KeyListener 与键绑定

    我正在尝试编写一个计算器并遇到问题 我已经为所有按钮制作了一个动作侦听器 现在我想让从键盘输入数据成为可能 我是否需要为 KeyListener 或 Keybinding 完成所有操作 或者是否有其他方法可以在单击按钮后将其发送到 acti
  • 在 Windows 命令行中自动化 cygwin 命令(最终在 MsBuild 中)

    我遇到的情况是 我有一些 cygwin 命令 我希望在 Windows 命令行中运行它们 例如 chmod 777 home administrator 目前我必须手动输入cygwin bat 然后在cygwin中输入上述命令 我想知道是否
  • 在 Android 上使用 BasicHttpRequest 从 webview 共享 cookie

    我在发送 cookie 作为 http get 的一部分时遇到问题 首先 我进入网络视图中的登录页面 该页面为我提供了一个 cookie 我已经检查过 cookie 存储在 CookieManager 中 然后我使用 BasicHttpRe
  • 将 json 数据转换为 html 表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 是否有任何 jQuery 或 javascript 库可以根据给定的 json 数据生成动态表 我不想定义列 库应该读取 json 哈希中的键并生成列 当然 我可以自己迭代json数
  • 如何获取特定语言的 DBpedia 数据?

    我尝试了这个请求 但如果我想检索意大利语信息 还有其他服务 类似 可以吗 你可以使用dbpedia SPARQL 端点运行查询 例如 PREFIX rdfs
  • 在 Python 中跟踪被忽略的异常?

    我的应用程序有一个自定义音频库 它本身使用 BASS 库 我在整个程序中创建和销毁 BASS 流对象 当我的程序随机退出时 我还没有弄清楚模式 我在控制台上收到以下通知 Exception TypeError NoneType object
  • 16:跳过密码保存,因为可能会提示用户使用 Android 自动填充

    我正在将谷歌智能锁集成到我的 Android 应用程序中 但在某些设备中 当我尝试将凭据保存到谷歌时 我收到此错误 我正在使用以下代码来保存凭据 Credential credential new Credential Builder em
  • 我可以将签出的文件集成到 perforce 上的不同分支中吗

    我们正在进行设计 为此我们在主分支中创建了类的骨架 现在 我们开始编码 为此我们有了一个新分支 因此 如果我可以将主分支中的所有新文件移动到新分支中 那就太好了 但是 我还无法签入它们 那么 是否可以集成已签出的变更列表 谢谢 Perfor
  • 检查 smoothScrollToPosition 何时完成

    我想查一下什么时候smoothScrollToPosition已完成滚动回第一项recyclerview 我尝试这样做 只有当 smoothScrollToPosition 仍在滚动时才有效 recyclerView getLayoutMa
  • 将具有 IFormFile 属性的模型从 Angular2 上传到 ASP.NET Core Web Api

    我正在尝试发送模型 其中一部分是代表用户头像的 IFormFile 类型属性 但不幸的是 我的头像属性始终为空 我看到了很多如何发送单个图片元素的示例 但我可以找到当它是模型的一部分而不是完成时的单个元素时如何发送它的示例例如这里 这是我设
  • 使用 AAD 令牌在 Databricks 中创建 Azure Key Vault 支持的秘密范围

    我的最终目标是将 ADLS gen2 容器安装到我的 Databricks 工作区中 作为在 Azure 服务主体的支持下由 Terraform 管理的部署的一部分 这是一个单一部署 它创建所有 Azure 资源 网络 防火墙 存储帐户 D
  • CSS 箭头进度条

    我目前正在学习有关 css 的所有内容 因此我尝试生成具有不同功能的不同形状 我目前正在开发一个项目 该项目需要一个水平箭头来显示发生的事务的 进度 所以我试图生成一个箭头 进度条 例如 XX 10 gt the XX s depict a
  • 使用 Enzyme 测试窗口滚动事件处理程序的最佳方法是什么?

    我一直在与一个新团队一起开发 React 应用程序 讨论围绕为触发 window scroll 事件方法的组件编写单元测试进行 那么 我们以这个组件为例 import React Component from react class MyC
  • 来自 HTTP 客户端的 PUT 请求后收到“411 Length required”

    我正在开发一个实现 HTTP 客户端的 Java 程序 我测试它向服务器发送请求 GET POST 和 DELETE 请求工作正常 例如 在 POST 请求之后我得到一个输出 Data extracted status message ok
  • Nodejs 为什么await 只限于异步函数?

    可能重复的wait 仅在 async 函数中有效 我是新来的NodeJS我发现了这个概念async await有点混乱 经过一番阅读和摸索 这是我的理解 假设我有一个函数sum像这样 function sum a b print the n
  • 复制的重复文件(Android Studio 0.4.0)[重复]

    这个问题在这里已经有答案了 在我的项目中 我使用 Apache 的 httpcore 和 httpmime 库 将 Android Studio 更新到 0 4 0 后 我在构建项目时遇到了以下问题 Duplicate files copi
  • 用于更新查找表中向量的某些值的规范 tidyverse 方法

    我经常需要根据查找表重新编码数据框列中的一些 不是全部 值 我对我所知道的解决问题的方法不满意 我希望能够在清晰 稳定 高效方式 在编写自己的函数之前 我想确保我没有复制已经存在的标准 Toy example data data frame
  • Chrome 扩展程序历史记录 API

    我正在编写一个 chrome 扩展 需要分析最近的浏览历史记录对于特定选项卡 The chrome history API允许我搜索全局历史记录中的项目 但似乎没有提供将结果本地化到特定选项卡的方法 我是否错过了什么 或者这是不可能得到的
  • 初始化后向Select2添加选项

    这似乎是一件标准的事情 但我正在努力寻找一个清晰而简单的解决方案 我希望能够向已初始化的 Select2 添加一个或多个附加选项 我正在使用旧版本的 Select2 但不确定该版本是什么 您可以像在标准中解决大多数问题一样解决涉及 Sele
  • Android:保存应用程序单例类中存储的数据的最佳方法

    保存 Android 应用程序的应用程序类 单例 中存储的数据的最佳方法是什么 我有一个安静的大应用程序 可以在活动之间共享大量数据 所以大部分都存储在Application Singleton上 一切都很好 util应用程序被操作系统在内