Android 应用程序类onCreate方法在第二次启动应用程序时未运行
我使用Android 应用程序类onCreate方法在第二次启动应用程序时未运行,android,Android,我使用Application类在活动间共享全局变量,并在应用程序类的onCreate方法中设置它们。启动应用程序变量时,在onCreate中设置值,在activities中使用应用程序时,我正在更改变量的值。当我退出应用程序并再次启动它时,我会得到旧值,即活动中设置的变量的最后值。这意味着一旦创建应用程序,就不会再次启动应用程序。这是应用程序类的onCreate方法中的代码 @Override public void onCreate() { super.onCreate
Application
类在活动间共享全局变量,并在应用程序类的onCreate
方法中设置它们。启动应用程序变量时,在onCreate中设置值,在activities中使用应用程序时,我正在更改变量的值。当我退出应用程序并再次启动它时,我会得到旧值,即活动中设置的变量的最后值。这意味着一旦创建应用程序,就不会再次启动应用程序。这是应用程序类的onCreate方法中的代码
@Override
public void onCreate() {
super.onCreate();
application = this;
category = 12;
subCategory =22;
}
看起来旧的应用程序对象仍在内存中,并且在第二次启动应用程序时未调用onCreate
需要做什么才能使应用程序类的
onCreate
再次运行,或者在哪里初始化应用程序类中的变量以便代码每次都运行。在应用程序类中,只有当退出应用程序时进程结束时才调用onCreate()方法。通常,当系统需要内存时,或者当您使用“后退”按钮而不是“主页”按钮退出应用程序时,进程将停止。但是,您不能指望它被终止
然而,在活动之间传递参数的正确方法是意图或偏好。在你的情况下,我有一种感觉,偏好才是最好的选择
如果您确实想在退出应用程序时终止进程,可以调用
系统退出(0)代码>当用户在第一个活动中按back键时。这是绝对不推荐的,因为这意味着要对抗Android操作系统的工作方式,并可能导致问题
更多信息请点击此处:尝试使用方法或
您的onCreate方法应如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(someView);
}
@Override
public void onResume() {
super.onResume();
variable = someVariable;
}
您的onResume方法应如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(someView);
}
@Override
public void onResume() {
super.onResume();
variable = someVariable;
}
检查一下。在onResume()
中执行所需操作。内存中可能还有应用程序的实例
重新检查生命周期方法,确保应用程序正确退出
还要检查是否有任何活动正在泄漏内存 请在清单文件中声明您的应用程序类名。
如下
<application
android:name="com.tt.app.TTApplication"
android:label="@string/app_name"
我的应用程序也有同样的问题,应用程序类的onCreate()方法在我的应用程序加载时第一次被触发。Daniel使用System.exit(0)的解决方案成功了,但这个解决方案将我引向了另一个问题。使用System.exit(0)后,未调用我的前台活动的onPause()、onStop()和onDestroy()方法
对于应用程序来说,这是一个合理的行为,因为如果您使用System.exit(0),那么您的应用程序将从系统的进程队列中删除,android将无法为我的前台活动执行onPause()、onStop()和onDestroy()方法
我用于解决此问题的解决方法是在按下“后退”按钮时完成我的活动,并在一段时间后终止我的应用程序进程,如下所示:
public void killApp(){
final Thread threadKillApp = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG, "Going to kill app");
android.os.Process.killProcess(android.os.Process.myPid());
}
});
threadKillApp.start();
}
在对我的活动调用finish()之后调用killApp()方法完成了任务。感谢您的回复,我正在应用程序类的onCreate中设置变量值,我刚刚检查了应用程序类中没有onResume。onResume()是活动类生命周期的一部分(请检查链接)。您重写此方法以执行所需操作。感谢回复我正在应用程序类的onCreate中设置变量值,我刚刚检查了应用程序类中没有onResume或onStart。感谢回复我正在应用程序类的onCreate中设置变量值,我刚刚检查了应用程序类中没有onResume。我猜每个人都认为你在使用活动。为了在活动之间共享值,我不会使用变量。我建议使用SharedReferences
。查看此链接:您可以在一个活动(或应用程序)类中设置首选项值,然后可以在应用程序中的任何位置读取它们。其优点是类之间的低耦合,以及持久性,持久性也会在您离开应用程序后持续,因为首选项是存储在应用程序沙盒目录中的xml文件。(/data/data/your.package.name/)感谢您的回复。我说的是应用课程,不是活动。至少你是对的。所以您认为使用SharedReferences共享变量比使用应用程序类更好。我会调查的。我还编辑了我的答案。如果有帮助,请将其标记为解决方案。谢谢