Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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_Memory - Fatal编程技术网

Android 为什么应用程序中定义的全局变量变为空?

Android 为什么应用程序中定义的全局变量变为空?,android,memory,Android,Memory,使用Crashlytics,我意识到在我的应用程序中发生的一些崩溃似乎与全局变量在应用程序运行时变为null有关 我已经阅读了以下两个堆栈流,但我不确定它们是否完全适用于我的情况,尽管也许有人可以指出它们是如何做到的: 首先,应用程序设计为不在后台运行。我知道当按下home(主页)按钮时,它将继续在后台运行,但它无法从后台恢复运行,而是被迫重新启动应用程序。因此,我不认为这是一个应用程序全局内存被释放的问题,除非在重启时它试图使用在后台运行的旧版本,并且在某些设备上它似乎刚刚消失 其次,我无法在

使用Crashlytics,我意识到在我的应用程序中发生的一些崩溃似乎与全局变量在应用程序运行时变为null有关

我已经阅读了以下两个堆栈流,但我不确定它们是否完全适用于我的情况,尽管也许有人可以指出它们是如何做到的:

首先,应用程序设计为不在后台运行。我知道当按下home(主页)按钮时,它将继续在后台运行,但它无法从后台恢复运行,而是被迫重新启动应用程序。因此,我不认为这是一个应用程序全局内存被释放的问题,除非在重启时它试图使用在后台运行的旧版本,并且在某些设备上它似乎刚刚消失

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

第三,如果真的发生了这种情况,是否有办法将全局内存恢复到原来的位置以及触发我保存它并重新建立它的事件

以前的博客讨论了低功耗设备,或者内存不足的设备可能导致这种情况。但从外观上看,这些设备似乎还有很多电池。他们可能会有很多其他应用程序在后台运行,占用内存,导致我的应用程序内存被收集

下面是正在使用的全局内存类的示例

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来说还是相当新的

可能有一些您感兴趣的信息。也许您的应用程序正在调用onPause,然后稍后调用onReusme,并且您没有正确地将状态保存到Bundle?如果您尝试重写onSaveInstanceState方法,则可以确保这些变量保持不变。

谢谢!我正在对onSaveInstanceState进行一些研究,主要是关于恢复我的活动状态数据。但我担心的是,由于这是应用程序的全局数据,并且表单有时可以容纳超过10mb的数据,这可能就是它被释放的原因!保存数据可能会变得混乱。有相当多的活动,并且不希望在发生任何onPause或onResume时必须保存和恢复此全局数据。我真正好奇的是这是如何发生的,当我看到它出现时,可能会拦截或从中恢复。应用程序类将在每个组件调用上执行,如活动服务和接收器。因此,从第二次执行开始,您可能必须保护全局数据。@7383很高兴知道这一点。这是否包括设备何时进入睡眠状态?活动服务和接收者由哪些操作组成?我怀疑currentForm的全局数据是罪魁祸首…我必须查看onCreate调用第二个tile是否会重置数据。