【问题标题】:Android - How to exit an app when user press the home button?Android - 当用户按下主页按钮时如何退出应用程序?
【发布时间】:2011-04-30 14:08:17
【问题描述】:

我想知道当用户按下主页按钮时如何退出应用程序。

据我所知,Home Button 在后台移动正在运行的应用程序并将 Launcher 进程放在前面。

我知道我可以使用 finish(),但我不知道应该在哪里调用它,因为我不知道当用户按下 Home 键时哪个函数会被调用。

谢谢。

【问题讨论】:

  • 无论你认为用这种方法解决什么问题,都可以用其他技术更好地解决。我没有遇到主动销毁活动的正当理由,例如,用户回复了Notification。例如,如果您这样做是出于安全考虑(例如,强制登录),请根据时间进行。无论用户按下 HOME 还是回复 Notification 或其他任何无关紧要的东西,只要用户将浏览器选项卡从 Web 应用程序中切换出去,就会导致他们自动退出 Web 应用程序。
  • 同理,如果因为用户返回活动时崩溃而主动销毁活动,请只修复错误,而不是导致用户丢失上下文。而且,最重要的是,这只有在你有一个单一活动的应用程序时才真正有用,因为 Android 中没有任何东西可以让你“退出应用程序”。如果你觉得在你的场景中这仍然是合理的,我希望你能说服我。
  • @CommonsWare 我认为你是对的。我应该尝试找到其他选项来处理主页键,而不是破坏我的应用程序。谢谢你叫醒我。但是我的问题很简单,当用户按下主页键时,我的应用程序没有崩溃。实际上问题出在我的主屏幕小部件上,因为每当我通过按主页键退出我的应用程序时,如果我点击我的主屏幕小部件,那么它会在执行必要的任务后再次启动主要活动。
  • 我将此解释为“您单击应用小部件中的某些内容,它会打开 Activity B,然后 BACK 将用户返回到已经运行的 Activity A”。如果是这种情况,请尝试在应用小部件的PendingIntent 中将FLAG_ACTIVITY_NEW_TASK 添加到您的Intent。如果这不起作用,请尝试FLAG_ACTIVITY_CLEAR_TOP。如果我误解了这些症状,我深表歉意。
  • @CommonsWare - 我完全同意,从设计/用户体验的角度来看,当用户按下主页按钮时尝试终止应用程序是非常糟糕/毫无意义的。但是,有时客户想要这种行为并且不会让步。

标签: android key exit android-homebutton


【解决方案1】:

根据您想要做什么,覆盖 onUserLeaveHint 可能是最好的选择:

http://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()

这会让您的应用知道您的应用正在退出,因为用户选择了切换应用(例如通过点击主页按钮或选择通知)。如果来电(或类似情况)导致您的应用进入后台,则该提示函数将不会被调用,因为用户没有启动该操作。

【讨论】:

  • 谢谢。这正是我想要的。当 Android 为我们提供这种方法来执行我们想要在 Home Key 事件中执行的任务时,我不知道为什么 CommonsWare 说“这在 android 中不受支持”。奇怪!!
  • @Varundroid:我一直忘记那个方法。这并不重要,因为无论如何您都不能“退出应用程序”。当onUserLeaveHint() 返回truefalse 时,我也有点担心——文档概述了两种情况,但还有更多。
  • onUserLeaveHint() 如果你开始烦人的新意图也会触发
【解决方案2】:

就我而言,

我在申请中有很多活动 所以如果我使用 'onUserLeaveHint'、'onStop' 或 ...

它只是捕捉活动转换。

所以我把每个活动的代码放在下面。 最后捕捉用户的主页按钮操作。

首先,你有单例对象

public class ActivityContext {
    public static Context context = null;
}

以及每一项活动,

@Override
protected void onStop(){  //onStop runs after New one's onResume
    super.onStop();
    if(ActivityContext.context==context) { //user home button out
        AppStartEnd.sendAppEndData(context);
    }
}
@Override
protected void onResume(){  
    super.onResume();
    ActivityContext.context = YourActivity.this;
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多