当应用程序长时间返回后台并返回时,静态对象出现null问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当应用程序长时间返回后台并返回时,静态对象出现null问题相关的知识,希望对你有一定的参考价值。

我有一个场景:

  • 已经在静态对象中存储了有关我的应用程序用户的一些信息,并且可以从我的应用程序的任
  • 这一切都很好
  • 但是当我按下主页按钮并且应用程序在后台很长时间或我打开其他消耗内存的应用程序时,我的应用程序的所有静态对象都变为null
  • 我得到NullPointerException

经过大量调试后我认为可能是因为内存问题,但我找不到任何解决方案。

他们还有其他方法吗?

答案

最有可能的是,您的进程在后台处于终止状态。 This is perfectly normal。您不能假设在创建任何活动时将填充任何static字段。或者:

  • 删除static字段,或
  • 仅通过可以延迟初始化该字段的方法访问static字段,或
  • 切换到依赖注入之类的东西
另一答案

如果在极端内存压力的情况下,系统可以终止您的应用程序进程,将所有静态字段重置为默认值,在您的情况下将为null,则可能会发生此类问题。

所以,为了避免它,我建议你使用SharedPreferences https://developer.android.com/reference/android/content/SharedPreferences.html

另一答案

您应该使用SharedPreferences来存储用户信息。这可以在应用程序终止后保留数据。用法:

SharedPreferences pref = 
getApplicationContext().getSharedPreferences("UserInfo", 0); // 0 - for private mode
Editor editor = pref.edit();

editor.putString("user_name", "User"); //store data
String userName = pref.getString("user_name"); //get data 

以上是关于当应用程序长时间返回后台并返回时,静态对象出现null问题的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序进入后台时,在前台执行的长时间运行的任务被挂起

带有进度通知的长时间运行的后台任务

当应用程序后台运行时,Objective-c 长时间运行的蓝牙后台服务

viewDidAppear,而且当应用程序从后台返回时

当应用程序从后台返回时如何隐藏飞溅?

应用程序在后台崩溃,而蓝牙连接长时间丢失