当Android需要内存并杀死你的应用时,如何持久化数据?

问题描述 投票:1回答:1

在我的应用程序中,我正在处理一些内存中的巨大对象,当用户使用 "保存 "功能时,这些对象将被持久化。问题是,当用户在后台离开应用程序时,没有保存,过了一段时间后,操作系统会从内存中删除这些巨大的对象,以增加可用的内存,所以,当用户返回应用程序时,这些对象是空的,它就会崩溃。

是否存在一种方法,可以知道操作系统什么时候在杀死应用程序的一部分,并阻止这个杀死过程,先存储这些对象? 如果有,我就可以恢复它们,但我在android文档中找不到任何东西。

我知道有一个方法叫做 onLowMemory但这不是解决办法,因为。

虽然没有定义调用的确切时间点,但一般来说,当所有后台进程被杀死时,就会发生。

http:/developer.android.comreferenceandroidappApplication.html#onLowMemory%28%29。

EDIT:知道应用程序到前台和到后台的示例代码。

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");
            }
        });
    }
}
android android-lifecycle android-memory android-background
1个回答
0
投票

你是否尝试过使用一个自定义的Application类,该类扩展了Application.ActivityLifecycleCallbacks?还有 OnTrimMemory 在应用程序类本身


0
投票

操作系统从内存中删除那些巨大的对象,以增加可用的内存,所以,当用户返回到应用程序时,这些对象是空的,它就会崩溃。

更准确的说,是Android终止了你的进程。

是否存在一种方法可以知道操作系统什么时候在杀死应用程序的一部分

安卓系统不会"[杀死]应用程序的一部分"。它终止的是你的进程。

而且,不,当你的进程即将被终止时,你不会被告知。

并阻止该杀戮进程先存储那些对象?

不对。

你可以发现当你的应用程序整体移动到后台时,可以使用 ProcessLifecycleOwner. 在这之后的任何时候,你的进程都有可能被终止,原因是什么--这不仅仅是内存压力。例如,用户可以通过设置应用撤销运行时的权限。

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

© www.soinside.com 2019 - 2024. All rights reserved.