Android中保存同一个Activity的多个实例状态

2024-02-21

我正在开发一个 Android 应用程序,当数据来自使用相同额外内容的相同 Activity 时,我希望避免重新加载类似数据。

具体来说,当我使用 extra 启动 Activity 'A' 时,我使用这个 extra 从服务器加载远程数据。 通过此活动,我可以使用不同的额外内容重新启动“A”等等。

例子 :

A:id1 --> A:id2 --> A:id3

但是,它也可以是我已经加载的额外内容:

A:id1--> A:id2 --> A:id3 -->A:id1

在这种情况下,我不会再次请求服务器或丢失活动堆栈。

据我了解,“onSaveInstanceState”允许保存一个活动的一个实例,但就我而言,它是同一活动的多个实例(具有不同的额外内容)。

那么,它是管理同一 Activity 的已保存实例状态(捆绑包)列表的解决方案吗?或者是其他东西 ?

提前致谢


The onSaveInstanceState方法未按照您描述的方式使用。看一下这个, http://developer.android.com/reference/android/app/Activity.html它是活动类的文档,特别是活动生命周期部分。onSaveInstanceState是当操作系统由于某种原因必须终止 Activity 时调用的方法。它允许您填充一个 Bundle,这将有助于重新创建用户停止的 Activity 的特定实例。通常会发生这种情况,因为用户切换到不同的应用程序,并且操作系统正在终止 Activity 以回收内存,但也会发生在屏幕旋转时,因此至少要注意平台的细微差别,这一点很重要。

至于你的问题,我要做的是使用数据库来存储从服务器检索的信息。当你启动一个Activity时,你可以首先检查数据库中是否存在需要填充该Activity的数据。如果是,则从那里加载并显示它,否则调用服务器。

这很好,因为数据将在应用程序的多次使用中保持不变。更进一步,如果来自服务器的数据可能已过时,您可以轻松扩展它以最初显示数据库中的数据,并启动对数据的异步请求,该数据将在返回时更新 UI 和数据库。您的用户几乎永远不会处于等待加载内容的状态,这总是一件好事!

这是关于实现 sqlite 数据库基础知识的一个很好的教程。 http://www.drdobbs.com/database/using-sqlite-on-android/232900584这还将给您带来额外的好处,即在应用程序的单独运行中保存数据。

作为替代方案,如果您并不真正需要数据库的持久性或其他功能,并且认为开销不值得,您可以创建一个 Singleton 类来跟踪返回的数据,也许可以实现它使用应用类 http://developer.android.com/reference/android/app/Application.html。重要的是要注意(并让我们回到原点)任何存储此数据的内存方法都应该使用onSaveInstanceState以确保如果 Activity 在意外时间被终止,您不会丢失任何数据。

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

Android中保存同一个Activity的多个实例状态 的相关文章

  • 如何在android中点击画布上绘制的圆圈?

    我正在开发一个人脸检测应用程序 在这个应用程序中 我必须在脸上的眼睛和嘴巴用户可以点击拖动圆圈 在检测到的人脸上根据自己设置位置 因此 所有圆圈都已成功绘制在脸上 但我无法单击特定圆圈并使用缩小选项在整个脸上移动 请建议我有关相同问题的正确
  • Android 构建 gradle 在特定设备上失败

    我面临一个奇怪的问题 当我编译我的应用程序以在 Android 7 0 的设备上运行它时 它可以工作 但是当我尝试为 Android 4 2 1 的设备进行编译时 它会失败并出现以下错误 错误 任务 app transformClasses
  • 如何在 StateListDrawable 中设置可绘制对象的 alpha 值?

    我想在按下时更改可绘制对象的 alpha 值 因此 我创建了两个可绘制对象并将它们放入 StateListDrawable 中 并设置按下状态的 alpha 值 但它就是行不通 StateListDrawable content new S
  • 如何检测android中的颠倒方向?

    在我的 Android 应用程序中 我有全景图像 并且我使用 TYPE ORIENTATION 传感器根据手机运动旋转该图像 它对于横向和纵向都工作良好 这是旋转逻辑的代码 Override public void onSensorChan
  • Android,让文本切换器成为中心?

    如何集中我的文本切换器 我尝试过设置重力 但似乎不起作用 ts setFactory new ViewFactory public View makeView TextView t new TextView this t setTypefa
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • 为网络和/或持久存储序列化 Android Bundle?

    我需要序列化一个全面的应用程序 游戏 状态 以便通过网络传输或保存到磁盘并在以后检索 当然 捆绑包用于在多个用例中保存 恢复状态 因此使用它们将是理想的选择 但是 由于某种原因 Bundle 不可序列化 寻找解决方案只发现了将 Bundle
  • Android,语言文件不起作用

    我现在正在创建一个 Android 应用程序 并尝试为我的母语添加语言文件 但在某种程度上 这对我不起作用 我尝试在两部不同的手机中加载该应用程序 但结果相同 之前创建过语言文件 效果良好 但这次不行 手机设置为瑞典语 语言文件适用于我创建
  • Android Things 文件系统

    我正在 Android 上构建这个应用程序 我希望能够让它访问 U 盘上的媒体文件 甚至树莓派的 SD 卡上的媒体文件 我还不知道我将如何处理这些文件 但我只是想知道它是否可能 如果不是这样也没关系 我还有其他解决方案 但我想我会先从明显的
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • 如何在代码中设置TextView的文字颜色?

    在 XML 中 我们可以通过以下方式设置文本颜色textColor属性 比如android textColor FF0000 但如何通过编码来改变它呢 我尝试过类似的东西 holder text setTextColor R color R
  • 将搜索结果更新为 Android 中的 Lazy Adapter

    我有项目列表 想为其实现搜索功能 因此 我有一个带有 addTextChangedListener 的文本框 搜索结果运行良好 但当我尝试将结果设置为 ListView 时 新结果将附加到旧结果中 我正在使用惰性适配器 如何清除适配器中的旧
  • ImageButton 拉伸背景图像

    我正在尝试创建一个没有边框的 ImageButton 但遇到了图像按钮大小的问题 我使用 Eclipse ADT 将 ImageButton 拖到布局中并选择背景图像 图像按钮显示如下 正如您所看到的 背景图像和图像按钮周边之间有一个边框
  • Android 依赖项:apklib 与 aar 文件

    据我了解 apklib包含代码 共享资源Maven aar文件由以下人员分发Gradle The aar与 apklib 的主要区别在于 类被编译并包含在 aar 根目录下的classes jar 中 然而apklib不能包含已编译的类文件
  • 如何使用 onSearchRequested() 调用搜索对话框

    我正在尝试实现搜索对话框 但无法显示活动中的搜索 我在清单文件中定义了主要活动 此活动向用户显示了他们必须从中选择的选项列表 选项之一是 搜索 选项
  • onTouch 给出奇怪的触摸点 Android

    我正在做的事情非常简单 我以前做过 但现在它没有按我的预期运行 无论如何 让我简要解释一下我正在尝试做什么以及我得到了什么 设想 我有一个RelativeLayout其中一个ImageView已放置 现在我设置touchlistener像这
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • Android:列“_id”不存在

    我收到这个错误 IllegalArgumentException 列 id 不存在 当使用SimpleCursorAdapter从我的数据库中检索 该表确实有这个 id柱子 注意到这是一个常见问题 我尝试根据网上的一些解决方案来解决它 但它
  • 将 firebase 消息传递添加到 flutter android 项目时出现依赖错误

    我已将 firebase 消息传递添加到我的 Flutter 项目中 在 iOS 上运行良好 在 Android 上运行时出现错误 Android dependency androidx localbroadcastmanager loca

随机推荐

  • 解析“querystring”格式数据的最简单方法

    使用以下代码 string q userID 16555 gameID 60 score 4542 122 time 343114 解析这些值的最简单方法是什么 最好不编写自己的解析器 我正在寻找具有相同功能的东西Request query
  • 后台工作者 CancelAsync() 不起作用

    我正在尝试取消我的后台工作人员WorkerClass bw CancelAsync 但这根本行不通 编辑 我在这里发布了完整的代码 希望这会有所帮助 好的 我添加了一些消息框来了解工作人员是否仍然忙碌 并且有线的事情是 我得到一个false
  • 在 ElasticSearch Nest 客户端中创建自定义分析器

    我对使用 Nest 客户端的 Elasticsearch 非常陌生 我正在使用自定义分析器创建索引 但是在使用分析进行测试时 它似乎没有使用自定义分析器 主要是没有出现edgengram标记 我是否缺少任何东西可以使我的自定义分析器成为索引
  • Python从列表中删除项目[重复]

    这个问题在这里已经有答案了 我有一个给定格式的列表 John Smith Linus Torvalds Bart Simpson 列表 Linus Torvalds 中有一些这样的元素 我想删除它们 那么为什么下面的代码不删除它们呢 for
  • 在站点之间传递凭据

    我在具有两个不同域的两台不同服务器上运行两个不同的站点 一个站点运行 Joomla 另一个站点运行 Moodle 我已将 Moodle 服务器配置为基于 Joomla 站点上的用户表进行身份验证 因此我们拥有权威的用户信息来源 我想做的是
  • Android - 如何解析 JSONObject 和 JSONArrays

    我的版本是 Android 2 2 Google API 8 我从模拟器运行 我正在尝试尝试访问此 JSON 对象中的位置 我使用后得到这个 InputStream instream entity getContent JSONObject
  • WIFI变化的广播动作

    在我的应用程序中 每当设备连接或断开 WIFI 网络时我都必须收到通知 为此我必须使用BroadcastReceiver但是在阅读了关于 SO 的不同文章和问题后 我有点困惑我应该为此使用哪种广播操作 在我看来 我有三个选择 SUPPLIC
  • Vaadin:小部件集未加载。

    我能够将 Vaadin 模块集成到我们基于 Spring 的应用程序中 集成后 我想运行甘特图的演示 它是 Vaadin 的附加组件 并在 github 上找到了它here https github com tltv gantt 文件夹内有
  • 类型“System.Data.Entity.DbContext”是在未引用的程序集中定义的。您必须添加对程序集“EntityFramework 2”的引用

    我有一种解决方案 一个项目是带有 edmx 数据模型的类库 另一个是asp net web 表单项目 当我开始解决方案时 出现以下异常 类型 System Data Entity DbContext 是在未引用的程序集中定义的 您必须添加对
  • Tailwind 自定义主题颜色不透明度未应用

    我正在研究一个Reactjs使用的项目顺风 CSS作为我的 CSS 框架 我正在尝试构建一个具有自定义颜色的主题 我将颜色定义为 CSS 变量index css文件 但设置 alpha 值对这些颜色不起作用 这是我的颜色值的 CSS lay
  • MongoDB - 清除嵌套数组中的项目

    如果我的模式中有一个嵌套数组 我如何告诉 MongoDB 删除其特定模型的条目 Schema var UserSchema new Schema username String documents Number 我尝试过这样的事情 db u
  • Xcode5:无法注册“/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle

    我的库有一些类型转换器 我正在注册一些 OSX 和 iOS 类型转换器 如下所示 当我为 iOS 进行编译时 我收到一些与无法找到 UIKit 相关的错误 以下是我针对 iOS 进行编译的方法 xcodebuild destination
  • 将 ViewPager 与不带 actionBar 的选项卡一起使用

    我正在使用名为EffectiveNavigation 的谷歌示例来创建带有选项卡的ViewPager 问题是在清单中 对于我的主要活动 我设置了 android theme android style Theme Holo NoAction
  • 多个表的视图。需要删除 1 个表定义的“双打”

    好吧 这就是我所坚持的 Full size https i stack imgur com AEIjH png SELECT dbo InstellingGegevens INST SUBTYPE dbo InstellingGegeven
  • 如何绘制这些数据?

    我有一个值数组theta and phi 如何轻松创建 MATLAB 绘图 其中theta and phi是这样的球坐标 如果我有一个数组 如何在 MATLAB 中绘制值theta and phi半径保持不变 这些是theta theta
  • pandas 时间戳与日期时间的性能较慢

    我似乎遇到了 pandas Timestamp 与 python 常规 datetime 对象的算术运算性能出乎意料的缓慢 这是一个基准测试 演示了 import datetime import pandas import numpy us
  • 找不到模块:无法解析“swiper/react”

    我在使用最新版本的 Swiper 时也遇到了同样的问题 它在我之前的项目中有效 但现在不起作用 连那个版本都没有 最新版本也试过了 这是我的代码 Import Swiper React components import Swiper Sw
  • xtext 自定义作用域:函数参数

    我正在尝试自定义作用域 这样 如果我的语言中有类似函数的东西可以获取参数 我希望这些参数仅在出现分号之前才可见 而在这个范围之外 我希望它不可见 我尝试在文件 MyDslScopeProvider xtend 中重新定义方法 getScop
  • 在我获取输入数据之前,什么会对其进行重新格式化?

    我有一个数据湖存储帐户 我有一个充满包含 JSON 格式数据的文件的目录 其中包括一些包含 ISO 8601 格式时间的字符串值 即 reading time 2008 09 15T15 53 00 91077 现在 当我使用数据工厂创建管
  • Android中保存同一个Activity的多个实例状态

    我正在开发一个 Android 应用程序 当数据来自使用相同额外内容的相同 Activity 时 我希望避免重新加载类似数据 具体来说 当我使用 extra 启动 Activity A 时 我使用这个 extra 从服务器加载远程数据 通过