【问题标题】:Understanding the Life cycle of Activity and Service了解 Activity 和 Service 的生命周期
【发布时间】:2019-05-28 21:00:42
【问题描述】:

假设我有多个活动,比如屏幕 A(主屏幕)和屏幕 B。

屏幕 A 打开屏幕 B,然后屏幕 B 启动一个服务,该服务将更新发送到屏幕 B。现在,当用户最小化应用程序并且服务正在运行并且由于 Android 操作系统内存不足时,它会清除应用程序。

现在我有两个问题

1) Android 操作系统是清除整个应用(屏幕 A 和屏幕 B)的内存还是只清除我的屏幕 B?

2) 我的服务也会被清除还是会继续运行?如果它被清除,那么带有通知的前台服务可以帮助我克服这个问题吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-service android-lifecycle activity-lifecycle android-memory


    【解决方案1】:

    现在,当用户最小化应用程序并且服务正在运行时,由于 Android 操作系统内存不足,它会清除应用程序。

    当 Android 内存不足时,它会终止一个进程。

    Android 操作系统是清除整个应用程序(屏幕 A 和屏幕 B)的内存还是只清除我的屏幕 B?

    默认情况下,您的应用使用单个进程。因此,当 Android 终止您的进程时,您应用的所有内容都会消失。

    我的服务也会被清除还是会继续运行?

    默认情况下,您的应用使用单个进程。因此,当 Android 终止您的进程时,您的服务也将消失。一些开发者选择将他们的服务放在一个单独的进程中(通过android:process manifest 属性)以帮助服务保持更长时间,但这会使您的应用更难构建。

    如果它被清除,那么带有通知的前台服务可以帮助我克服这个问题吗?

    前台服务大大降低了 Android 终止该服务进程以释放系统 RAM 的可能性。但是,you should only have a service running when it is actively delivering value to the user

    【讨论】:

    • 谢谢。根据您的回答,该应用程序将终止一个包含所有活动和服务的进程。我还有一个疑问。假设我有一个活动和一个前台服务正在运行(与活动相同的进程)并带有通知。那么如果应用程序杀死进程,那么服务也会被终止吗?如果是,那么让服务返回 STICKY 是否有助于立即重新创建服务?
    • @Rahulrr2602:“那么如果应用程序终止进程,那么服务是否也会终止?” -- 如果服务在那个进程中,那么服务将被销毁。 “如果是,那么让服务返回 STICKY 是否有助于立即重新创建服务?” ——我会选择“很快”而不是“立即”。如果您的服务有粘性,Android 应该为您创建一个新进程并重新启动您的服务。 “无论有没有通知,前台服务都会减少 Android 操作系统杀死我的应用程序进程的机会吗?” -- 前台服务有一个Notification
    • @Rahulrr2602:我在答案中提到了这一点。前台服务大大降低了 Android 终止该服务进程以释放系统 RAM 的可能性。在那个过程中是否还有活动并不重要。但请注意,某些设备有自己的任务管理器,用户可以在其中手动终止进程,即使是具有前台服务的进程。一般来说,用户总是可以在用户需要的时候摆脱你的进程。
    • @Rahulrr2602:在 Android 8.0+ 上,后台服务只能运行一分钟,因此对进程的生命周期影响不大。在较旧的设备上,后台服务将有助于保持您的进程处于活动状态,但不如前台服务那么多。
    • "即使应用程序/服务进程在最近列表中或对用户可见,它也不能运行超过 1 分钟" -- 如果应用程序具有前台 UI(例如,用户可以看到一个活动),那么该进程是一个前台进程。如果应用程序没有前台UI,并且服务是后台服务,则该进程是后台进程。一个服务只能在后台进程中运行 1 分钟。从 UI 的角度来看,概览屏幕(“最近列表”)不是前台的一部分,因此在其中不会使应用程序的进程成为前台进程。
    【解决方案2】:
    1. 如果其他应用程序需要内存,Android 操作系统将清除整个应用程序。

    2. 如果Activity被销毁,里面的服务也会被销毁。

    【讨论】:

    • 感谢您的回答。但是假设我有一个前台服务运行,通知返回 NOT_STICKY 它也会被破坏吗?如果是,那么会从应用程序上下文帮助启动服务吗?还是让服务返回 STICKY 帮助?将在 7 分钟内接受您的答案,因为由于 StackOverflow 限制,现在无法接受
    • 是的,会的。您在这里对前台服务和应用程序杀戮有一个很好的解释:stackoverflow.com/questions/30525784/…
    • 感谢您的回答。即使您的回答早于 CommonsWare 的回答,我也接受了他的回答,因为它有更好的解释并且他的声誉更高,因此其他用户可能更倾向于相信他的回答。对不起,但希望你能理解。
    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 2012-09-21
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多