Android - 生命周期和保存实例状态问题

2023-11-27

因此,我的应用程序中有一个用于创建新用户的表单,其中包含有关用户的相关详细信息和信息。那里没有问题,这只是用户在没有按下确认按钮的情况下离开活动时发生的情况。

这就是我想做的:

  1. 如果用户按下后退按钮,则尝试将所有数据保存到数据库并通知用户。
  2. 如果活动被中断(即被电话中断),请将所有数据保存到临时位置,以便当活动再次位于堆栈顶部时,似乎没有任何变化(但数据仍然尚未保存)到数据库)。
  3. 如果该 Activity 在后台被杀死以获取更多资源,请执行与上面第 2 点相同的操作(即,当该 Activity 再次启动时,似乎没有任何变化)。
  4. 如果再次启动整个应用程序(通过再次单击该图标)并且存储了上述第 2 点或第 3 点中的临时数据,请导航到“创建用户”活动并显示数据,就好像没有发生任何更改一样。

我目前正在尝试这样做:

  • Use onDestroy() and isFinishing()函数来查找 Activity 何时被终止,以覆盖上面的第 1 点(然后尝试保存所有数据)。
  • 保存所有数据onSaveInstanceState捆绑在一起(覆盖上面的第 2 点)
  • 创建的捆绑包是否为onSaveInstanceState在被杀死以获得更多资源的活动中幸存下来,因此当重新创建它时可以检索以前的状态(如上面的第 3 点)?
  • 不知道如何实现第4点。

任何帮助将不胜感激。

Cheers!


我时间有限,所以无法给出完整详细的答案,但简而言之,这是我的建议。

  • 而不是使用onDestroy(), use onPause()。那肯定会被调用;根据 Lifecycles 的官方文档,仅保证 onPause() 。 onStop 和 onDestroy 不是。
  • onSaveInstanceState 和 onPause 类似。当应用程序离开前台时(即,它进入被杀死的潜在危险区域),两者都会被调用,但与 oSIS 的区别在于它提供的临时捆绑包。 onPause 不提供任何数据存储机制,但如果您使用数据库,那么您已经拥有一个。根据文档,没有保证首先调用的顺序。
  • 第 3 点)这正是 oSIS 的用途
  • 第 4 点)您可以在数据库中创建一个“临时行”,即将临时数据保存到第 1 行,但只要正确保存,第 1 行就会被清空。然后在 onCreate() 中,检查第 1 行是否有真实数据或为空。 (如果您的列不能为空,则使用在正常使用过程中不会出现的预先确定的占位符值。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 生命周期和保存实例状态问题 的相关文章

  • 主题以编程方式设置。如何重新加载 Activity 来应用

    如何在不重新启动整个应用程序的情况下应用主题 如果我这样做startActivity getIntent finish 活动退出并且不重新启动 是否可以简单地重新启动 重新创建活动来应用主题 它的顺序不正确 finish intent ne
  • 将roottools.jar导入Android Studio

    我正在尝试从这里导入 roottools https code google com p roottools https code google com p roottools jar 文件 到 Android Studio 项目 到目前为
  • PHP服务器端IAB验证openssl_verify总是返回0

    我使用以下函数 服务器端 php 来验证 IAB v3 事务 我从 Android 应用程序传递过来 Override protected void onActivityResult int requestCode int resultCo
  • 在Android中将半径边框绘制到imageview或textview的一个角落

    我需要在我的应用程序中为图像视图或文本视图绘制边框 但我只需要在一个角落绘制它 就像图像一样 我做了一个形状 但我在所有 4 个边上都有边框
  • 删除视图并重新创建它

    有没有办法删除设置的视图 setContentView R layout set map center mapView MapView findViewById R id mapview 如果我再次调用此视图 则会收到一条错误消息 java
  • 删除 json 对象字符串中的“\”

    如何删除下面字符串中的特殊字符 String x message content toom recipients id 1000001865 room subject room 我使用了 x replaceAll 但它不起作用 您必须转义正
  • 通过我的应用程序以编程方式插入新联系人,而不使用 Intent

    我正在使用一个应用程序 与手机联系人进行交互 我想将新联系人添加到我的手机联系人列表中 我已经尝试过以下代码 但它不起作用 void addContact Context ctx PreviewContactModel model Arra
  • Android-全屏视频视图

    我正在尝试使此 VideoView 以全屏模式显示 public class ViewVideo extends Activity private String filename private static final int INSER
  • 无法找到/下载 AppCompat-v7:23.1.1

    怎么了 我遇到了很多 找不到 appcompat v7 23 1 1 的问题 许多解决方案都不起作用 经过几个小时的思考和寻找答案 我遇到了一个奇怪的问题 I have gotAndroid 支持库 23 1 1 已安装 所有功能 exce
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • 将 firebase auth 与 google app engine 云端点集成

    有人可以指定 使用一些示例代码 如何验证谷歌云端点中的 firebase 令牌吗 最近提出的问题根本没有澄清 如何将 Firebase 身份验证与 Google 应用引擎端点集成 https stackoverflow com questi
  • Android 性能:SharedPreferences 的成本

    当我的应用程序启动时 我使用分片首选项中的值填充容器类 这个想法是处理 SharedPreferences 和 PreferenceManager 一次 因为我猜它们很重 这是一个示例 SharedPreferences prefs Pre
  • 取消通知

    我使用Onesignal推送通知 需要取消所有onPause和onResume的通知 NotificationManager notificationManager NotificationManager getApplicationCon
  • Android 26 (O) 通知不显示操作图标 [重复]

    这个问题在这里已经有答案了 随着 Android 26 O 引入通知渠道 我一直在调查 Google 提供的com example android notificationchannels 这个示例按预期工作 直到我尝试添加Action到示
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • 获取当前图片在图库中显示的位置

    在我的应用程序中 我有一个图片库 但我想检测当前显示图像的位置 例如 当我启动我的活动时 位置是 0 但是当我在图库中滚动时 我想获取当前显示图像的位置 我尝试过 OnFocusChanged OnItemClicked 但只有当我单击图库
  • 如何以编程方式创建 CardView

    我正在开发一个 Android 应用程序Java Android Studio 我想在活动中创建CardView以编程方式 我想将以下属性设置为CardView layout width wrap content layout row 0
  • SQLiteDatabase.openDatabase 与 SQLiteOpenHelper.getReadableDatabase

    这两种方法有什么区别吗 两者都返回一个打开的 SQLiteDatabase 如果数据库不存在 两者都可以创建数据库 当需要读 写时 SQLiteOpenHelper 还具有 getWriteableDatabase 我应该使用哪种方法以及在
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • 我可以通过在 Android Activity 中声明适当的成员“静态”来提高效率吗

    如果一个 Activity 在实践中是单例 我认为我可以通过声明适当的成员 静态 来获得一些效率 且风险为零 是的 The Android 文档说 http developer android com guide topics fundam

随机推荐