Android 保持应用程序状态,直到应用程序被终止

Android 保持应用程序状态,直到应用程序被终止,android,Android,我在这里读了很多答案,但它们让我更加困惑,所以我的问题是: 我正在开发一个应用程序,其中应用程序的每个组件(活动、服务…)都需要直接访问应用程序的许可证状态(该状态在应用程序加载并保存在变量中时确定一次) 我希望将这种状态保存在应用程序中的某个地方,它将是最后一个被安卓系统杀死的“幸存者”。我在很多地方读到,在应用程序实例中保存状态信息是不好的,因为它可以被操作系统擦除,而其他组件不会从内存中删除,但我不知道更好的选择是什么。我还必须将该值保存在内存中,而不是将其保存到文件或应用程序的Share

我在这里读了很多答案,但它们让我更加困惑,所以我的问题是:

我正在开发一个应用程序,其中应用程序的每个组件(活动、服务…)都需要直接访问应用程序的许可证状态(该状态在应用程序加载并保存在变量中时确定一次)

我希望将这种状态保存在应用程序中的某个地方,它将是最后一个被安卓系统杀死的“幸存者”。我在很多地方读到,在应用程序实例中保存状态信息是不好的,因为它可以被操作系统擦除,而其他组件不会从内存中删除,但我不知道更好的选择是什么。我还必须将该值保存在内存中,而不是将其保存到文件或应用程序的SharedReferences中,因为它更容易被手动篡改


我的问题是-在整个进程结束之前,保存这些信息的最佳位置是什么?

您可以通过覆盖
onSaveInstanceState()
来保存活动或服务的状态。将数据写入传递给此方法的
Bundle
参数。当重新创建活动或服务时,您可以从传递到
onCreate()

包中加载信息。听起来您计划做的只是“缓存”应用程序类中的某些持久状态。换句话说,您所关心的是,无论调用getLicense()的应用程序类的哪个实例,只要它通过了
onCreate()
方法,它都应该具有正确的信息

因此,如果您正在做类似的事情,我认为您可以在应用程序类中“缓存”状态

private License mLicense;

@Override
public void onCreate() { 
    super.onCreate();
    mLicense = SomeProvider.getLicense();
}

public License getLicense() {
    return mLicense;

在应用程序类中存储状态的问题在于,可以使用应用程序的新实例/与暂停时不同的实例来恢复活动。因此,如果您将某个活动中的内容保存到应用程序类实例中的某个对象中,并希望在活动恢复时从中检索该内容,则这可能不起作用。可以找到一个很好的解释

创建一个扩展应用程序的单例类,并让它保存您的变量。您的应用程序实例在整个应用程序生命周期中保持活动状态,因此不确定您所说的是什么意思可以被操作系统删除(除非有一些我不知道的东西,我总是碰巧了解到)。