android-是从非活动状态恢复的活动

时间:2018-09-25 00:15:41

标签: android android-lifecycle android-viewmodel

我正在从Web加载数据并将其存储在ViewModel中。因此,当设备的方向改变时,数据将被保留,而我不必从网上重新加载。但是,如果该应用程序进入非活动状态(由于其他应用程序需要内存),则ViewModel内部的数据将被删除,并且在恢复活动/碎片时我将需要重新加载它。当然,可以通过在onSaveInstanceState()方法中保存一些标志并在重新创建活动/片段时在savedInstanceState包中找到标志的情况下从Web重新加载数据来避免此问题。但是,这并没有区分从静止状态返回和简单的方向更改。因此,每次我打开设备时,都会不必要地从服务器重新加载数据。

是否有办法知道活动/片段是否已从非活动状态恢复?

2 个答案:

答案 0 :(得分:1)

  

是否有办法知道活动/片段是否已从非活动状态恢复?

您可以利用以下事实:在终止应用程序的进程后,变量将返回其默认值(未初始化),并将其与常规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.
            }
        }
    }
}

答案 1 :(得分:0)

请尝试使用LiveData实现ViewModel。对于LiveData,使非生命周期对象了解生命周期。 另外,通过使用SharePreferences持久保存数据来为应用程序过时死亡做准备,因为onSavedInstanceState会删除onDestroy()上的所有数据,SharePreferences可以在应用程序重新启动时保存和检索存储的数据。 ViewModel仅处理与UI相关的事情,不知道任何称为LIFECYCLE的事情。所以这就是为什么要使用观察者模式-LiveData的原因。 如果应用到达onDestroy(),则即使onSavedInstanceState()也无法挽救。 总之,将ViewModel与LiveData结合使用并持久保存数据,以免导致应用程序过时死亡,而不是与onSavedInstanceState()结合使用,而与更强大的功能(如SharedPreferences等)结合使用。