2015-06-16 51 views
1

使用Crashlytics我已经意识到在我的应用程序中发生的一些崩溃似乎与全局变量在应用程序运行时变为null有关。Android - 为什么应用程序中定义的全局变量为空?

我已经阅读了以下两个stackflows,但我不知道他们完全适用于我的情况(尽管也许有人可以指出他们是如何做到):

Android :Declared Global variables becoming null while running the app?

Global variable becomes null sometimes

第一,该应用程序被设计为不在后台“运行”。我知道当主页按钮被击中时,它会继续在后台运行,但不能从背景拉回到操作中,而是被迫重新启动应用程序。所以我不认为这是应用程序全局内存被释放的问题,除非在重新启动时尝试使用在后台运行的旧版本(并且在某些设备上它似乎只是消失)。

其次,我无法复制在我的任何设备上解除分配内存的错误。它几乎似乎发生在应用程序的各种随机位置,虽然很少。我尝试着让它进入睡眠,重新运行,唤醒它,重新安装,我能想到的一切都没有成功。

第三,如果发生这种情况,有没有办法让全局内存回它是在哪里以及一些事件会触发我的它,和事件节省重新建立呢?

以前的博客都讨论过低功耗设备,或者低内存的设备可能导致这种情况。但看着它,这些设备似乎还有很多电池。他们可能有潜在的许多其他应用程序在后台运行咀嚼内存导致我的应用程序内存的集合?

这里是所采用的全球存储类的样本...

public class GlobalState extends Application { 

    public Form currentForm = null; 
    public int currentUserId = -1; 
    public int currentAccountId = -1; 
    public int currentSubformIndex = 0; 
    public Context context = null; 
    public AndroidLogger logger = null; 

    private static GlobalState instance; 

    public static GlobalState getInstance() { 
     return instance; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
     instance.context = getApplicationContext(); 
     logger = AndroidLogger.getLogger(getApplicationContext(), "xxxxxxxxxxxxxxxxx"); 
    } 

} 

原谅我,如果这确实很明显,仍然是相当新的到Android

回答

-1

https://stackoverflow.com/a/8023552可能有一些信息你”重新感兴趣。也许你的应用程序有onPause()然后onReusme()调用,并且你没有正确地保存状态到一个Bundle?如果您尝试覆盖onSaveInstanceState方法,则可能可以确保这些变量保持不变。

+0

谢谢!我正在对onSaveInstanceState进行一些研究,主要是为了恢复我的活动状态数据。但是我担心的是,由于这是应用程序的全局数据,并且表单有时可能会保存10mb以上的数据(这可能是它被取消分配的原因!)保存数据可能会变得混乱。有任何相当数量的活动,并且在发生任何'onPause'或'onResume'时,都不愿意保存和恢复这些全局数据。我真正好奇的是,当我看到它的到来时,这是如何发生的,也许是拦截或恢复。 –

+0

应用程序类将在每个组件调用(如活动服务和接收器)上执行。因此,您可能不得不从第二次执行开始保护您的全局数据。 – 7383

+0

@ 7383很好的知道。这包括设备何时进入睡眠状态?什么操作构成“活动服务和接收者”?我怀疑“currentForm”的全局数据是主要罪魁祸首......我将不得不查看onCreate调用第二个tile是否会重置数据。 –

相关问题