应用程序类onCreate方法未在第二次启动应用程序时运行

时间:2012-01-23 08:35:19

标签: android

我使用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的应用程序类再次运行,或者在应用程序类中初始化变量,以便每次都运行代码。

6 个答案:

答案 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()做你想做的事。