gpt4 book ai didi

android - 命令 APP_CMD_SAVE_STATE 的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 21:32:05 25 4
gpt4 key购买 nike

每次应用程序失去焦点(无论是通过点击菜单按钮手动,还是通过进入 idle )都会发送一个 APP_CMD_SAVE_STATE 命令。

在 native Activity (https://developer.android.com/reference/android/app/NativeActivity.html) 的 Android API 文档中显示的示例中,当发送此特定命令时,它们会在其 android_app 中保存某种“状态”。 .

    // (...)
switch (cmd) {
case APP_CMD_SAVE_STATE:
// The system has asked us to save our current state. Do so.
engine->app->savedState = malloc(sizeof(struct saved_state));
*((struct saved_state*)engine->app->savedState) = engine->state;
engine->app->savedStateSize = sizeof(struct saved_state);
break;
// (...)

如果你查看他们的代码, savedState只是一个保存值的结构。首先,我认为每当我们失去焦点时,我们都需要保存对我们的应用程序重要的每一个值,因为否则这些值都会变得损坏或类似的东西(是的,可怕!)

我通过删除上面的代码 fragment 来运行一个简单的测试,幸运的是没有任何改变,我的结构的值在重新获得焦点后保持不变,即使没有保存它们。

所以我想知道这个命令的目的是什么?这是需要考虑的重要事情吗?

最佳答案

APP_CMD_SAVE_STATE当您的应用失去焦点时发送命令。目的是不仅可以暂停您的应用程序,而且如果系统必须终止该应用程序以获取一些资源(例如可用 RAM),该应用程序可以在用户下次返回时无缝恢复。

If you look in their code, savedState is just a struct holding values.


是的,从 Native Activity 的角度来看,它只是一个结构体。但是这个结构在 ANativeActivity_onCreate() 中被传递给 Android通过 JNI 调用的函数(通常在 SDK 的 android_native_app_glue.c 中实现,如果需要,您可以更改或替换它)。因此,Android 将在管理应用程序时处理数据。

I run a simple test by removing the code snippet above, and fortunately nothing changed, the values of my struct stayed the same after regaining focus even without saving them.


你的测试太软了 :) 尝试打开 Recents screen并从那里关闭您的 Activity :点击 × 按钮或全部关闭命令。效果将是终止应用程序,您现在应该发现您的数据已被删除,除非您使用保存恢复机制。

关于android - 命令 APP_CMD_SAVE_STATE 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com