Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序在长时间从后台恢复时崩溃_Android - Fatal编程技术网

Android 应用程序在长时间从后台恢复时崩溃

Android 应用程序在长时间从后台恢复时崩溃,android,Android,我的应用程序在后台长时间闲置后崩溃。我调试后发现它崩溃的原因是由于NullPointerException。异常的原因是,当应用程序位于后台时,应用程序单例类中的数据被垃圾收集器销毁。我在整个应用程序的每个活动中都使用静态数据 我的问题是:有没有办法让应用程序类的数据在后台持久化?或者有其他解决方案吗?有几种不同的方法来保存数据。如果是小的,您可以使用SharedReferences。否则可能是SQL数据库 查看尽量避免在应用程序中使用导致此类问题的静态变量。尝试将数据保存在共享首选项中并使用它

我的应用程序在后台长时间闲置后崩溃。我调试后发现它崩溃的原因是由于
NullPointerException
。异常的原因是,当应用程序位于后台时,应用程序单例类中的数据被垃圾收集器销毁。我在整个应用程序的每个活动中都使用静态数据


我的问题是:有没有办法让应用程序类的数据在后台持久化?或者有其他解决方案吗?

有几种不同的方法来保存数据。如果是小的,您可以使用
SharedReferences
。否则可能是SQL数据库


查看尽量避免在应用程序中使用导致此类问题的静态变量。尝试将数据保存在共享首选项中并使用它。

如果可以,请将其存储在其他方法中。如果其数据结构复杂,您可能必须重新启动应用程序。例如,我的应用程序中有一个用户singleton,它保存着我服务器的登录信息。若我尝试的话,我无法保存这些数据——很多数据都隐藏在AWS变量中。我要做的是,在清理(而不是重新启动)后,检测我们何时从主页重新启动,并启动我的启动活动,然后完成当前活动。我必须将其添加到我应用程序中的每个活动中。

要获得更准确的答案,请将代码放在这里。在上,Android内存是有限的,所以VM可以删除它认为不必要的任何代码

查看活动生命周期方法,特别是
onResume
,并确保您完全理解这一点。很多时候,应用程序因为没有正确使用活动生命周期方法而崩溃

活动的另一个重要设计考虑事项是,无论持久性数据发生了什么,您的活动都应该使用一些默认值显示其UI。所以假设是这样的,如果我有数据,我会显示,如果我没有,我真的不在乎无论是否有数据,您的UI都不应崩溃。您可以使用
String.xml
存储一些默认值,甚至在布局中

如果您仍然想使用singleton类,这是非常好的,但请确保每次尝试访问singleton时都执行以下检查

if (instance==null)
    instance=Singleton.getInstance()
您的
getInstance()
方法不仅返回当前实例,还将确保

  • 它初始化所有对象和变量
  • 其他单例方法作为实例方法
不要静态地从一个活动访问另一个活动的数据。这对于android来说并不好,特别是对于你现在面临的类型问题,而且它也不是很好的OOP编程实践

这是一种保存数据的好方法,如果它满足您的需求,就去做吧


如果您想从不同的Android组件(如Activity、Service或BroadcastReceiver)传递数据,您可以将其放入一个捆绑包中,并按意图发送。而且,像往常一样,它们是SQLLite数据存储、文件IO等。

活动不再可见,这就是为什么它将转到onStop()而不是onResume()

请参见感谢您的回答minhaz,您描述得非常准确。+1表示“您的UI在有数据或没有数据的情况下都不会崩溃。”您是如何进行检测的?