【问题标题】:What happens to remote process hosting service after service is destroyed?服务销毁后,远程进程托管服务会发生什么?
【发布时间】:2013-07-02 09:49:06
【问题描述】:

我将服务绑定到应用上下文,该服务在单独的进程中运行(比如说#service_process)。 我通过抛出未捕获的异常和应用程序的主进程(#main_proccess)停止来模拟应用程序崩溃,显然是杀死和 GCing 组件,包括主应用程序上下文。 服务也未绑定(断开连接)和销毁(我调用了 Service#onDestroy())。

但是,根据$ adb shell ps | grep com.my_app,即使在#main 进程死亡之后,#service_process 仍然存在。

谁能解释这种行为的原因? 如何避免“悬空”#service_process ?

【问题讨论】:

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


    【解决方案1】:

    实际上,服务进程与前台进程并没有太大区别。如上所述here

    Android 的一个不同寻常的基本功能是应用程序 进程的生命周期不受应用程序直接控制 本身。而是由系统通过组合确定 在系统知道正在运行的应用程序部分中,如何 这些东西对用户很重要,以及总内存有多少 在系统中可用。

    还有这个:

    服务进程...所以系统会一直保持这样的进程 除非没有足够的内存来保留所有前景和 可见过程。

    【讨论】:

    • 谢谢,但正如我所描述的,我绑定到服务并且不启动它,所以我没有3. Service process。可能我有5. empty process所指的东西
    • 我不这么认为,因为绑定它或调用 startService() 都没有关系(两种方式进程都将启动,但在绑定情况下它将设置绑定)。根据我的理解,它实际上只对为您的服务调用 onDestroy 很重要,但对进程生命周期并不重要,而且我无法找到有关绑定/进程生命周期关系的任何信息。
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多