0

我遇到了一个问题,System.exit(0)导致应用程序启动时 Activity 快速退出:

在一个项目中,我看到用于System.exit(0)实现应用程序的完全退出,我这样做了,但是活动在项目中没有经历它的生命周期,所以我使用以下方法:

public class App extends Application {
    private int mLock = 0;
    @Override
    public void onCreate() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                mLock++;
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
                try {
                    //Simulation Activity Destroyed too time consuming and increase the probability of problems

                    Thread.sleep(300);
                } catch (InterruptedException e) {
                }
                mLock--;
                if(mLock<=0){
                    exit();
                }
            }
            @Override
            public void onActivityStopped(Activity activity) {}
            @Override
            public void onActivityStarted(Activity activity) {}
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
            @Override
            public void onActivityResumed(Activity activity) {}
            @Override
            public void onActivityPaused(Activity activity) {}

        });
    }

    public void exit() {
        System.exit(0);
    }

}

但是,问题出现了,如果我退出最后一个活动(退出应用程序),并立即快速启动应用程序,然后活动退出但它没有启动完成(闪退)。

编辑 我想要做的是在所有活动都被破坏时退出应用程序。但是,有一个问题:当应用程序想要完成自己的进程时,所有活动都被破坏了,但是甚至没有调用 System. exit(),启动一个activity,然后调用System.exit(),此时会闪退,如何避免这个问题?</p>

嗯,不过我的目的是结束应用进程(有些需要,不考虑是不是应该做),只是在默认启动activity的destroy之后,而不是在任何其他activity中做结束这个操作过程,我使用上述方法是为了确保所有的启动活动都能够在应用程序中完成其生命周期。但这有问题描述,这应该是多线程同步问题,但我在应用程序中有睡眠,为什么它可以在睡眠期间创建活动?不要application和activity不是同一个线程,但是它们的线程id是1。

4

2 回答 2

5

永远不要使用 System.exit(0)。这违背了 Android 编码实践。它旨在立即退出应用程序,这不是您想要的。如果用户按下“Home”或“Back”,则 Activity 将从堆栈中弹出并调用所有这些生命周期方法。finish()如果您有理由提前离开应用程序,另一种方法是使用该方法。

于 2013-02-21T03:09:49.167 回答
1

只是让你知道。强制关闭一个Activity或一个 Android 应用程序将不会继续专门调用其生命周期方法onDestroy()finish()改为使用

void exit()
{

    finish();

}

如果您真的想退出您的 android 应用程序,请关闭所有活动、服务和/或广播接收器,Android 系统将有权终止您的进程。

于 2013-02-21T03:09:36.100 回答