我使用Application
类来跨活动分享全局变量,我在应用程序类的onCreate
方法中设置它们。当我启动app变量时,在onCreate中设置值,并且在活动中使用app时,我正在更改varables的值。当我退出应用程序并再次启动它时,我将获取旧值,即活动中设置的变量的最后值。这意味着onCreate of Application不再在启动应用程序上运行。这是Application类的onCreate方法中的代码。
@Override
public void onCreate() {
super.onCreate();
application = this;
category = 12;
subCategory =22;
}
看起来旧的应用程序对象仍在内存中,并且在第二次启动应用程序时没有调用onCreate。
需要做什么才能使onCreate
的应用程序类再次运行,或者在应用程序类中初始化变量,以便每次都运行代码。
答案 0 :(得分:5)
请在清单文件中声明您的应用程序类名称。 如下所示
<application
android:name="com.tt.app.TTApplication"
android:label="@string/app_name"
答案 1 :(得分:1)
在Application类中,只有在退出应用程序时结束进程,才会调用onCreate()方法。通常,当系统需要内存或使用后退按钮而不是主页按钮退出应用程序时,进程将停止。但是,你不能依赖它被终止。
但是,在活动之间传递参数的正确方法是意图或偏好。在你的情况下,我觉得偏好是要走的路。
如果你真的想在退出应用程序时终止你的进程,你可以打电话
当用户按下您第一个活动的后退键时System.exit(0);
。绝对不推荐这样做,因为它意味着与Android操作系统的工作方式作斗争并可能导致问题。
有关此内容的更多信息:Is quitting an application frowned upon?
答案 2 :(得分:0)
您的应用程序可能仍在内存中。
重新检查生命周期方法并确保应用程序正常退出。
同时检查您的活动是否有泄漏内存。
答案 3 :(得分:-1)
我的应用程序遇到了同样的问题,其中应用程序类的onCreate()方法刚刚在我的应用程序加载时触发。 Daniel的使用System.exit(0)的解决方案做了诀窍,但这个解决方案引出了另一个问题。使用System.exit(0)之后,我的前台活动的onPause(),onStop()和onDestroy()方法没有被调用。
嗯,这对于应用程序来说是一个合理的行为,因为如果您使用System.exit(0),那么您的应用程序将从System的进程队列中删除,并且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()方法完成了这项工作。
答案 4 :(得分:-3)
尝试使用onStart()方法或onResume()。
你的onCreate方法应如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(someView);
}
你的onResume方法应如下所示:
@Override
public void onResume() {
super.onResume();
variable = someVariable;
}
答案 5 :(得分:-3)
检查Activity life cycle。改为在onResume()
做你想做的事。