最完美的退出 APP 的方式是储存所有已打开的 Activity, 在退出的时候销毁

储存所有已打开的 Activity 最简单的方式就是在 App 里注册 ActivityLifecycleCallbacks, 通过 onActivityCreated 方法提供的 Activity 来存储, 通过 onActivityDestroyed 来销毁

代码如下:

  1. import android.app.Activity
  2. import android.app.Application
  3. import android.os.Bundle
  4. class App : Application() {
  5. override fun onCreate() {
  6. super.onCreate()
  7. registerActivityLifecycleCallbacks(activityLifecycleCallbacksImp)
  8. }
  9. class ActivityLifecycleCallbacksImp : Application.ActivityLifecycleCallbacks{
  10. private val acts = arrayListOf<Activity>()
  11. override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
  12. acts.add(activity)
  13. }
  14. override fun onActivityDestroyed(activity: Activity) {
  15. acts.remove(activity)
  16. }
  17. fun exitApp() {
  18. acts.forEach {
  19. it.finish()
  20. }
  21. }
  22. override fun onActivityStarted(activity: Activity) = Unit
  23. override fun onActivityResumed(activity: Activity) = Unit
  24. override fun onActivityPaused(activity: Activity) = Unit
  25. override fun onActivityStopped(activity: Activity) = Unit
  26. override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit
  27. }
  28. companion object {
  29. val activityLifecycleCallbacksImp by lazy {
  30. ActivityLifecycleCallbacksImp()
  31. }
  32. fun exitApp() {
  33. activityLifecycleCallbacksImp.exitApp()
  34. }
  35. }
  36. }

使用方式:

  1. // kotlin
  2. App.exitApp()
  3. // java
  4. App.Companion.exitApp();