当应用程序的所有活动完成后会发生什么?

Jai*_*dra 16 android process android-activity

场景:

我在Android应用程序中有四个活动,比如A,B,C和D. Constants.java应用程序中有一个类可以扩展Application类以维护全局应用程序状态.Constants类包含应用程序的所有常量变量.活动流程是这样的A-->B-->C-->D.当从活动A按下后退按钮时,我正在调用finish()方法,该方法将完成活动A并关闭应用程序.之后,如果我从所有应用程序打开应用程序,则会有一个变量,Constants.java其值在上次启动时仍然存在.当我从活动A(背面按下)开始System.exit(10)跟随时,同样的事情不会发生Process.killProcess(Process.myPid()).

问题:

  1. 通过调用每个活动的finish()完成所有活动将关闭应用程序(其过程)?
  2. 即使所有活动都已完成(已关闭),变量的值如何仍然存在?
  3. 呼叫System.exit(10)Process.killProcess(Process.myPid())退出申请是否公平?

更新:

如何在退出应用程序时清除应用程序常量(BackAnd HomeActivity)?

m0s*_*it0 14

1)不,Android不保证这样.操作系统决定是否终止进程.

2)因为Activity实例仍然存在于Dalvik VM中.在Android中,每个进程都有一个单独的Dalvik VM.

每个进程都有自己的虚拟机(VM),因此应用程序的代码与其他应用程序隔离运行.

当你调用finish()它并不意味着Activity实例是垃圾收集.你是说Android的要关闭Activity(不显示它了).它将一直存在,直到Android决定终止进程(从而终止DVM)或实例被垃圾收集.

当需要执行任何应用程序的组件时,Android会启动该过程,然后在不再需要该过程时或系统必须为其他应用程序恢复内存时关闭该过程.

3)除非你有充分的理由,否则我不会这样做.根据经验,您应该让Android处理何时杀死您的应用程序,除非您的应用程序状态中存在需要在失去焦点时重置应用程序的内容.

行情来源


Rag*_*ood 6

通过调用每个活动的finish()完成所有活动将关闭应用程序(其过程)?

不,它不应该.这是因为活动不是应用程序的唯一组件.服务,BroadcastReceivers仍然可以在没有UI的情况下运行.通过尽可能保持应用程序进程运行,Android可以确保更快地响应用户再次打开应用程序,或者更快地启动服务等,因为不需要重新创建应用程序实例.

只有当您或其他应用程序明确终止它或系统将其终止以释放资源时,您的进程才会终止.

即使所有活动都已完成(已关闭),变量的值如何仍然存在?

您的变量位于Application类中,该类遵循Singleton模型,因此您的值将持续存在,直到整个应用程序进程被终止.

此外,finish()只要求onDestroy(),这是不是一个解构,如解释在这里.因此,在调用完成后,甚至活动变量也可能会持续存在,因为您的实例仍然存在,直到Android感觉需要销毁它,或者您的进程被终止.

调用System.exit(10)后跟Process.killProcess(Process.myPid())退出应用程序是否公平?

虽然这会杀死应用程序,但不建议这样做.出于各种原因,请参阅问题.