【问题标题】:Exiting programmatically seems successful, but "Force stop" button is still active以编程方式退出似乎成功,但“强制停止”按钮仍处于活动状态
【发布时间】:2021-03-30 04:14:53
【问题描述】:

我正在尝试以编程方式退出我的应用程序,因此我调用了这些行:

my_activity.finishAndRemoveTask();
context.stopService(new Intent(context, mysvc.class));

应用程序似乎正在关闭:

com.my.package I/my_activity: onDestroy
I/mysvc: onDestroy

所以活动和服务似乎都被破坏了。

但是,当我签入Settings/Apps/App info 时,我的应用程序似乎仍然“可强制停止”(即强制停止按钮仍然处于活动状态)。

当我按下这个“强制停止”按钮时:

D/AppInfoDashboard: Stopping package com.my.package
I/ActivityManager: Force stopping com.my.package appid=xy, user=xy: from pid xy
I/ActivityManager: Killing xy:com.my.package/xy (adj xy): stop com.my.package
D/AppActionButtonControl: Sending broadcast to query restart status for com.my.package
D/AppActionButtonControl: Sending broadcast to query restart status for com.my.package
D/AppActionButtonControl: Got broadcast response: Restart status for com.my.package false
D/AppActionButtonControl: Got broadcast response: Restart status for com.my.package false

按下此按钮后,它会变为非活动状态,我相信我的 com.my.package 应用程序已成功(并完全)终止。

所以我的问题是,如果我上面的代码行没有做到这一点,我该如何以编程方式实现这一点?还有:如果 Android 明确要求退出,为什么它会让我的应用程序处于某种准运行状态?

请注意,我不想在退出时终止我的应用程序。当用户从菜单中选择“退出”选项时,我想优雅地终止它。

【问题讨论】:

  • 您当前所做的将是优雅地终止您的应用程序(停止任何服务并完成您的活动)。 Android 会将您的应用程序在内存中保留一段时间,以便用户再次打开它时它可以更快地启动。
  • 简短回答:你不能在 Android 中杀死自己的应用程序,操作系统负责进程的生命周期管理。

标签: android exit


【解决方案1】:

我相信我的 com.my.package 应用程序已成功(并完全)终止。

发生了很多事。 “强制停止”按钮不是您希望用户做的事情。

如果我上面的代码行没有做到这一点,我如何以编程方式实现这一点?

您不能强制停止自己的应用程序。

如果 Android 明确要求退出,为什么它会让我的应用程序处于某种准运行状态?

引用the documentation:

Android 的一个不同寻常的基本特性是应用程序进程的生命周期不直接由应用程序本身控制。相反,它是由系统通过组合应用程序中系统知道正在运行的部分、这些东西对用户的重要性以及系统中可用的总内存量来确定的。

在 Android 应用中具有“退出”选项是非常不寻常的。您目前所做的作为“退出”逻辑的实现并不可怕,尽管用户可能会因应用程序的任务消失而感到困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2022-10-13
    • 2014-08-23
    相关资源
    最近更新 更多