【问题标题】:Android Application onCreate, when is it calledAndroid Application onCreate,什么时候调用
【发布时间】:2016-01-15 13:11:57
【问题描述】:

我还是不明白Application(不是Activity)的生命周期是怎样的,

很明显,当您启动 GUI 时会调用 Application 的 onCreate 方法。

但是,它是在以下任何一种情况下开始还是在所有情况下开始?

  • 应用小部件可见
  • 广播接收器接收到一些东西
  • 推送通知到达设备并显示消息
  • 在应用关闭后点击推送通知(如从通知中心)
  • 服务已启动

Application 进程将保持多长时间?

现在我有一个问题,我看到应用程序(进程)在我关闭/终止应用程序后重新启动。但是没有实现任何东西来产生这种行为。

【问题讨论】:

  • 是的。基本上任何时候您的应用程序中的代码都会被执行。它一直保持活动状态,直到系统决定停止它,或者您从最近的应用程序菜单中将其杀死。

标签: android android-service android-lifecycle application-lifecycle


【解决方案1】:

但是,它是在以下任何一种情况下开始还是在所有情况下开始?

您的Application 实例是作为启动进程的一部分创建的。

应用小部件可见

只是可见与您的应用及其流程无关。您的应用程序及其进程将参与填充应用程序小部件、创建时间和更新时间。例如,如果updatePeriodMillis 正在触发更新,而当时间到来时,您没有进程,则在启动进程的过程中创建一个Application 实例,然后调用AppWidgetProvider onUpdate().

广播接收者收到一些东西

如果您的进程已经存在,则您的 Application 实例已经存在。如果您的进程不存在,则在使用onReceive() 调用BroadcastReceiver 之前,将创建一个Application 实例作为启动进程的一部分。

推送通知到达设备并显示消息

如果您指的是 GCM,因为它是以广播的形式出现的,请参见上文。

应用关闭后点击推送通知

我不明白你的意思。

服务已启动

如果您的代码正在启动服务,那么您的进程已经在运行并且您已经有一个Application。如果某个其他进程正在启动您的服务,而您的进程没有运行,则在创建进程的过程中会在 Service 之前创建一个 Application

Application 进程将保持多长时间?

如果“应用程序进程”是指“进程”,粗略地说,您的进程将持续一毫秒到一千年之间。它会一直存在,直到 Android 终止它以释放系统 RAM 以供其他应用程序使用,或者直到某些特定的东西摆脱它(例如,“任务杀手”,设置中的强制停止)。

【讨论】:

  • 好的,换句话说,每当我的代码执行某些内容时,它总是会启动?
  • @htafoya:当某种形式的 IPC 需要您拥有流程时,您的流程就会启动。启动活动、启动或绑定到服务、发送广播或与提供者合作是四种主要情况。其他东西是其中之一的改进(例如,AppWidgetProvider 实际上是BroadcastReceiver 的子类)。
  • your process will be around for somewhere between a millisecond and a millennium,这是一种非常有趣/积极的思维方式,我喜欢你采取的范围略大于必要的范围......
【解决方案2】:

应用程序onCreate() 在应用程序停止时被调用,并且它已启动。

例如:

  • 在应用未运行时启动应用(第一次在会话中运行或在强制停止后启动)

  • 您长时间退出每个活动(它不会立即被杀死!)并且 Android 决定关闭您的应用并重新启动它

  • 你将应用程序置于后台,加载 Chrome,加载一些东西,然后 Android 决定你的应用程序应该消失并谋杀它 (process com.example.acme.helloworld has died.),应用程序本身与每个静态变量一起被谋杀,你的应用从头开始重新创建,但您的活动从活动堆栈和onSaveInstanceState -bundle 加载

考虑到推送通知接收器服务很可能在不同的进程中,我假设它也可以从头开始启动您的应用程序实例。

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 2016-09-17
    相关资源
    最近更新 更多