android - 是从非 Activity 应用程序状态恢复的 Activity

标签 android android-lifecycle android-viewmodel

我正在从网络加载数据并将其存储在 ViewModel 中.因此,当设备的方向发生变化时,数据会保留下来,我不必从网络上重新加载它。但是,如果应用程序进入非 Activity 状态(由于其他应用程序需要内存),ViewModel 中的数据将被删除,我将需要在恢复 Activity/fragment 时重新加载它。这个问题当然可以通过在 onSaveInstanceState() 方法中保存一些标志并在重新创建 Activity/fragment 。然而,这并没有区分从不活动中恢复和简单的方向改变。因此,每次我打开设备时,都会不必要地从服务器重新加载数据。

有没有办法知道 Activity/fragment 是否从非 Activity 状态恢复?

最佳答案

Is there a way to know if the activity/fragment was restored from an inactive state?

您可以利用以下事实:当您的应用进程被终止时,变量将返回到它们的默认(未初始化)值,并将其与正常的 savedInstanceState 逻辑相结合。

public class MainActivity extends AppCompatActivity {

    private static boolean processWasAliveTheWholeTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            processWasAliveTheWholeTime = true;
        } else {
            if (!processWasAliveTheWholeTime) {
                // if savedInstanceState is not null, that means we're being recreated.
                // the only way processWasAliveTheWholeTime could be false is if our process was killed.
            }
        }
    }
}

关于android - 是从非 Activity 应用程序状态恢复的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488914/

相关文章:

android - 结合搜索栏和进度条来创建支持修剪的媒体播放器

java - 通过在自定义 View 的 onDraw 中设置单位矩阵来抵消 Canvas

android - 是否可以在 Google Maps v2 上使用搜索?

android - Activity 无法转换为 LifecycleOwner

android - 更新列表元素内容时 Jetpack Compose : No recomposition happening,

android-livedata - ViewModel Livedata 观察者调用轮换

java - 在 Android Studio 中应用于 URL 末尾时出现 "null"EditText 错误

java - 在 View 中添加和删除 RealmChangeListener

android - FragmentManager.put/getFragment 与 findFragmentByTag

android - 我怎样才能在可组合函数中运行我的逻辑代码 1 次?