Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/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 应用程序类onCreate方法在第二次启动应用程序时未运行_Android - Fatal编程技术网

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共享变量比使用应用程序类更好。我会调查的。我还编辑了我的答案。如果有帮助,请将其标记为解决方案。谢谢