这是一个相当难的问题:
我打开我的应用程序.它启动一个活动,它充当splashscreen(ASplashscreen),在其中我JSON从本地存储(raw文件夹)加载一些数据并将其存储在singleton object(静态)内存中.完成此过程后,它会自动移动到主要活动(AMain)
我通过按下home button并运行其他应用程序,游戏等退出应用程序.当我重新打开我的应用程序时,应用程序在onCreate方法内崩溃,AMain因为它试图使用内部的一些数据,singleton object但数据是null.所以NullPointerException当它这样做时它会抛出一个.看来,它重新启动AMain,而不是ASplashscreen让singleton没有机会重新初始化.
这种情况在多次尝试中随机发生......
我有两个假设......
我的第一个推测,也就是我对Android操作系统的了解,当我运行其他应用程序(尤其是游戏)时,其中一个需要大量内存,所以操作系统从内存中释放我的应用程序以腾出空间,所以singleton data是的garbage collected.
我还假设当gc从内存中删除我的单例时,操作系统仍保留一些与当前运行活动的"状态"相关的数据,因此它至少知道在AMain关闭应用程序之前它已经打开了活动.这可以解释为什么它重新开放AMain活动而不是ASplashscreen.
我对吗?或者是否有另一种解释为什么我得到这个例外?欢迎任何建议/澄清.
另外,处理这个问题的最佳方法是什么?我的方法是每当我尝试使用它时检查单例数据的存在,如果它是null,那么基本上只是重新启动应用程序.这使得它经历了ASplashscreen所以JSON初始化,一切都很好.
编辑根据要求,这是我的AndroidManifest
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.vending.BILLING"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:name=".global.App"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/AppTheme">
<!--SPLASH SCREEN--> …Run Code Online (Sandbox Code Playgroud) android ×1