System.exit(0)会在应用程序启动时快速退出活动

时间:2013-02-21 03:05:21

标签: android

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

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

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。退出(),启动一个活动,然后调用System.exit(),此时会有一个flash退出,如何避免这个问题?

好吧,但是我的目的是结束应用程序进程(有些需要,不考虑应该做什么),只是在默认启动活动之后销毁,而不是在任何其他活动中执行此操作的结束过程中,我使用上面的方法以确保所有启动活动都能够在app中完成其生命周期。但是那个问题就像描述一样,这应该是多线程同步问题,但我已经睡在应用程序中,为什么它可以在睡眠期间创建活动?不应用程序和活动不是同一个线程,但它们的线程ID是1。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

void exit()
{

    finish();

}

如果你真的想要退出你的Android应用程序,关闭所有活动,服务和/或BroadcastReceivers,Android系统将有权终止你的进程。