小编Gag*_*gan的帖子

应用程序从错误的活动重新启动

这是一个相当难的问题:

我打开我的应用程序.它启动一个活动,它充当splashscreen(ASplashscreen),在其中我JSON从本地存储(raw文件夹)加载一些数据并将其存储在singleton object(静态)内存中.完成此过程后,它会自动移动到主要活动(AMain)

我通过按下home button并运行其他应用程序,游戏等退出应用程序.当我重新打开我的应用程序时,应用程序在onCreate方法内崩溃,AMain因为它试图使用内部的一些数据,singleton object但数据是null.所以NullPointerException当它这样做时它会抛出一个.看来,它重新启动AMain,而不是ASplashscreensingleton没有机会重新初始化.

这种情况在多次尝试中随机发生......

我有两个假设......

  1. 我的第一个推测,也就是我对Android操作系统的了解,当我运行其他应用程序(尤其是游戏)时,其中一个需要大量内存,所以操作系统从内存中释放我的应用程序以腾出空间,所以singleton data是的garbage collected.

  2. 我还假设当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

2
推荐指数
2
解决办法
1918
查看次数

标签 统计

android ×1