[英]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.