2013-02-21 69 views
0

我遇到了一个问题,System.exit(0)使活动迅速退出时,应用程序启动:System.exit(0),使活动迅速退出时,应用程序启动

在项目

,我看到使用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); 
    } 

} 

但是,这样的问题出现,如果我退出了最后活动(退出应用程序),立即快速启动应用程序,然后“活动”退出,但未完成(闪退)。

编辑 我想要做的就是退出应用程序时,所有活动destroyed.but什么,有一个问题:当应用程序要完成自己的过程中,所有活动被破坏,但如果还没有打电话系统。退出(),启动了一个activity,然后调用System.exit(),此时会出现一个flash退出,如何避免这个问题?

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

+0

为什么使用System.exit而不是Activity.finish? System.exit退出整个过程我想。 – StarPinkER 2013-02-21 03:08:31

+0

@JermaineXu是的,我想要做的是完成应用程序 – admin 2013-02-21 04:25:07

回答

1

只是为了让你知道。强制关闭Activity或Android应用程序将不会继续调用其生命周期方法,特别是onDestroy()。使用finish()代替

void exit() 
{ 

    finish(); 

} 

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

+0

我想要做的就是退出应用程序,当所有的活动被销毁。但是,有一个问题:当应用程序想要完成自己的进程,所有的活动都被销毁,但是什么时候甚至没有打电话给System。退出(),启动一个活动,然后调用System.exit(),此时会出现一个flash退出,如何避免这个问题? – admin 2013-02-21 04:31:54

5

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

+0

我想要做的就是退出应用程序时,所有的活动被销毁。但是,那里是一个问题:当应用程序想要完成自己的进程时,所有的活动都被破坏,但是甚至没有调用System时。退出(),启动一个activity,然后调用System.exit(),此时会有一个flash退出,如何避免这个问题? – admin 2013-02-21 04:29:25

+0

什么finish()函数只是退出了activity,而不是app,Application在内存中,除非系统恢复。 – admin 2013-02-21 04:31:15

+0

该应用程序将永远在内存中。这是它的工作方式。 Android操作系统会在清理完成后立即清理它。 – DeeV 2013-02-21 12:41:24

相关问题