当 IntentService 启动时,Application 对象会启动吗?
When IntentService starts does Application object start?
我想了解 Android
中的 Application
对象生命周期,尤其是 IntentService
。
如果IntentService
启动,Application
对象会随之启动吗?确切的顺序是什么?最后,这种情况下什么时候销毁?
Application
实例是单例。每当 Android 创建一个 OS 进程来托管应用程序的 Android 组件 (Activity, Service, BroadcastReceiver, Provider
) 时,它会执行以下操作:
- 创建一个新的
Application
实例(它将调用那个 class 的构造函数)
- 在新的
Application
实例上调用 onCreate()
之后,Android 实例化必要的组件(调用该组件的构造函数),然后在该组件上调用 onCreate()
。
在IntentService
的例子中,你应该看到以下内容(按顺序):
- 创建
Application
的新实例(调用 Application
的构造函数)
- 致电
Application.onCreate()
- 创建
IntentService
的新实例(调用 IntentService
的构造函数)
- 致电
IntentService.onCreate()
如果您的 IntentService
完成并停止,Android 最终将在 IntentService
实例上调用 onDestroy()
。此时,如果 OS 进程中没有其他活动组件, Android 可能会决定杀死 OS 进程,或者它可能会留下 OS 进程一会儿。
如果 Android 需要再次启动您的 IntentService
并且您的应用程序仍有一个实时 OS 进程,Android 将不会创建新的 OS process 它只会重用现有的。在这种情况下,Application
实例已经存在,因此 Android 不需要实例化一个新实例。 Android 只是创建了一个新的 IntentService
实例,调用 IntentService.onCreate()
并启动了 IntentService
.
Application
实例永远不会被销毁。当 Android 想要关闭托管您的应用程序的 OS 进程时,它只会终止该进程。
我想了解 Android
中的 Application
对象生命周期,尤其是 IntentService
。
如果IntentService
启动,Application
对象会随之启动吗?确切的顺序是什么?最后,这种情况下什么时候销毁?
Application
实例是单例。每当 Android 创建一个 OS 进程来托管应用程序的 Android 组件 (Activity, Service, BroadcastReceiver, Provider
) 时,它会执行以下操作:
- 创建一个新的
Application
实例(它将调用那个 class 的构造函数) - 在新的
Application
实例上调用onCreate()
之后,Android 实例化必要的组件(调用该组件的构造函数),然后在该组件上调用 onCreate()
。
在IntentService
的例子中,你应该看到以下内容(按顺序):
- 创建
Application
的新实例(调用Application
的构造函数) - 致电
Application.onCreate()
- 创建
IntentService
的新实例(调用IntentService
的构造函数) - 致电
IntentService.onCreate()
如果您的 IntentService
完成并停止,Android 最终将在 IntentService
实例上调用 onDestroy()
。此时,如果 OS 进程中没有其他活动组件, Android 可能会决定杀死 OS 进程,或者它可能会留下 OS 进程一会儿。
如果 Android 需要再次启动您的 IntentService
并且您的应用程序仍有一个实时 OS 进程,Android 将不会创建新的 OS process 它只会重用现有的。在这种情况下,Application
实例已经存在,因此 Android 不需要实例化一个新实例。 Android 只是创建了一个新的 IntentService
实例,调用 IntentService.onCreate()
并启动了 IntentService
.
Application
实例永远不会被销毁。当 Android 想要关闭托管您的应用程序的 OS 进程时,它只会终止该进程。