繁体   English   中英

当 Android 需要 memory 并杀死您的应用程序时,如何保留数据?

[英]How to persist data when Android needs memory and kills your app?

在我的应用程序中,我正在处理 memory 中的一些巨大对象,当用户使用“保存”function 时,这些对象会持续存在。 问题是,当用户在后台离开应用程序时,没有保存,一段时间后,操作系统会从 memory 中删除那些巨大的对象,以增加可用内存 memory,因此,当用户返回应用程序时,这些对象是 Z37A6259CC0C1DAEFF294它崩溃了。

是否存在一种方法可以知道操作系统何时终止应用程序的某些部分,并阻止该终止进程以首先存储这些对象? 如果是这样,我将能够恢复它们,但我在 android 文档中找不到任何内容。

我知道有一个名为onLowMemory的方法,但这不是解决方案,因为:

虽然没有定义调用它的确切时间,但通常会在所有后台进程都被杀死时发生。

http://developer.android.com/reference/android/app/Application.html#onLowMemory%28%29

编辑:了解应用程序进入前台和后台的示例代码:

public class CustomApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // register observer for knowing when application goes to background and to foreground
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new LifecycleObserver(){
            @OnLifecycleEvent(Lifecycle.Event.ON_START)
            public void onAppStarted() {
                Log.d("XXXX", "onAppStarted() called");
            }

            @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
            public void onAppStopped() {
                Log.d("XXXX", "onAppStopped() called");
            }
        });
    }
}

您是否尝试过使用扩展 Application.ActivityLifecycleCallbacks 的自定义应用程序 class? Application class 本身也有OnTrimMemory

操作系统从 memory 中删除那些巨大的对象以增加可用内存 memory,因此,当用户返回应用程序时,这些对象是 null 并且它崩溃

更准确地说,Android 会终止您的进程。

确实存在一种方法可以知道操作系统何时杀死应用程序的某些部分

Android 不会“[杀死]应用程序的一部分”。 它会终止您的进程。

而且,不,当您的进程即将终止时,您不会收到通知。

并阻止该杀戮过程首先存储这些对象?

不。

您可以使用ProcessLifecycleOwner了解您的应用程序何时整体移动到后台。 在此之后的任何时候,您的进程都可能因任何原因终止——不仅仅是 memory 压力。 例如,用户可以通过设置应用程序撤销运行时权限。

因此,在您的情况下,如果您不想在进行更改时保存数据,您可以在应用程序移至后台时将数据保存到临时文件中,并在进程开始时从该临时文件中恢复数据再次备份。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM