Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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_Background_Global Variables_Resume - Fatal编程技术网

当Android应用程序恢复时,全局变量上的值是否已重置?

当Android应用程序恢复时,全局变量上的值是否已重置?,android,background,global-variables,resume,Android,Background,Global Variables,Resume,当一个应用程序被放在后台并随后恢复到某个活动时,在另一个活动中设置的静态类变量是否可能被垃圾收集器重置并将值设置为零 我在我的主要活动中使用了几个公共静态int变量,并在其他各种活动中使用它们作为全局变量。我在Android Market的开发者控制台收到了一份崩溃报告,我能找到的唯一解释是,应用程序恢复到一个活动,该活动在另一个类中使用了公共静态int变量的值,但该值(神秘地?)变为零。我知道在应用程序第一次启动时,它被设置为其他内容。这有可能吗 如果我的怀疑是正确的,那么当一个应用程序被放到

当一个应用程序被放在后台并随后恢复到某个活动时,在另一个活动中设置的静态类变量是否可能被垃圾收集器重置并将值设置为零

我在我的主要活动中使用了几个公共静态int变量,并在其他各种活动中使用它们作为全局变量。我在Android Market的开发者控制台收到了一份崩溃报告,我能找到的唯一解释是,应用程序恢复到一个活动,该活动在另一个类中使用了公共静态int变量的值,但该值(神秘地?)变为零。我知道在应用程序第一次启动时,它被设置为其他内容。这有可能吗

如果我的怀疑是正确的,那么当一个应用程序被放到后台时,推荐的保存全局变量值的方法是什么?将它们保存在OnPause()中的SharedReferences中,或者使用onSaveInstanceState或其他方法

当一个应用程序被放在后台并随后恢复到某个活动时,在另一个活动中设置的静态类变量是否可能被垃圾收集器重置并将值设置为零

它不会被“垃圾收集器重置”。然而,这个过程可能已经被Android终止,以便为其他应用程序释放内存

当一个应用程序被放到后台时,建议用什么方法来保存全局变量的值

静态数据成员只能是缓存。无论发生什么情况(例如,进程被终止),您想要保留的数据都需要放入一些持久性存储中,例如平面文件、
SharedReferences
或数据库
onPause()
可能是安排持久化该数据的时间,因为在此之后的任何时间,您的进程都可能会在不通知的情况下终止

当一个应用程序被放在后台并随后恢复到某个活动时,在另一个活动中设置的静态类变量是否可能被垃圾收集器重置并将值设置为零

它不会被“垃圾收集器重置”。然而,这个过程可能已经被Android终止,以便为其他应用程序释放内存

当一个应用程序被放到后台时,建议用什么方法来保存全局变量的值


静态数据成员只能是缓存。无论发生什么情况(例如,进程被终止),您想要保留的数据都需要放入一些持久性存储中,例如平面文件、
SharedReferences
或数据库
onPause()
可能是安排持久化该数据的时间,因为在此之后的任何时间,您的进程都可能会在不通知的情况下终止。

请小心使用静态变量。有关Singleton(也使用静态变量来维护状态)的说明,请参见链接:

使用静态变量时要小心。按照链接了解有关Singleton的说明(Singleton也使用静态变量来维护状态):

您可以将此值保存在活动中的方法onDestroy上的SQLite上,或者保存在响应退出的另一个方法上。

您可以将此值保存在活动中的方法onDestroy上的SQLite上,或者保存在响应退出的另一个方法上。

我知道该过程可以由系统终止。这不是问题所在。问题是当应用程序恢复到不是主活动的活动时。@Anders:如果用户通过最近的任务启动应用程序,控件将返回到用户最后参与的任何活动。从堆栈跟踪中,我只看到系统java文件,没有一个文件来自我的源。这让我觉得崩溃发生在应用程序从后台恢复时。如果在微调器上设置了主活动中不存在的值,则它似乎会崩溃。微调器中使用的ArrayList的大小是在非主活动的onCreate中创建的,并使用我的主活动中全局变量的大小。该值似乎为零。@Anders:那么该值可能是由您的代码设置为零,或者您的进程已被终止并重新启动。如果它被终止并重新启动,则不应直接转到非主活动中的onCreate(),对吗?这就是我解释发生了什么的方式,因为堆栈跟踪没有提到我的任何源文件,但给出了一个仅存在于非主活动中的微调器异常。你认为我的解释正确吗?我知道这个过程可以被系统终止。这不是问题所在。问题是当应用程序恢复到不是主活动的活动时。@Anders:如果用户通过最近的任务启动应用程序,控件将返回到用户最后参与的任何活动。从堆栈跟踪中,我只看到系统java文件,没有一个文件来自我的源。这让我觉得崩溃发生在应用程序从后台恢复时。如果在微调器上设置了主活动中不存在的值,则它似乎会崩溃。微调器中使用的ArrayList的大小是在非主活动的onCreate中创建的,并使用我的主活动中全局变量的大小。该值似乎为零。@Anders:那么该值可能是由您的代码设置为零,或者您的进程已被终止并重新启动。如果它被终止并重新启动,则不应直接转到非主活动中的onCreate(),对吗?这就是我解释发生了什么的方式,因为堆栈跟踪没有提到我的任何源文件,但给出了一个仅存在于非主活动中的微调器异常。你认为我的解释正确吗?