小编典典

覆盖后退按钮以充当主页按钮

all

在按下后退按钮时,我希望我的应用程序进入停止状态,而不是破坏状态。


Android文档中它指出:

…并非所有活动都有在按下 BACK 时被销毁的行为。当用户在 Music 应用程序中开始播放音乐然后按下 BACK
时,应用程序会覆盖正常的返回行为,防止播放器 Activity 被破坏,并继续播放音乐,即使它的 Activity 不再可见

如何在我自己的应用程序中复制此功能?

我觉得应该有三种可能…

  1. 捕获后退按钮按下(如下所示),然后调用主页按钮调用的任何方法。

    @Override
    

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
    Log.d(this.getClass().getName(), “back button pressed”);
    }
    return super.onKeyDown(keyCode, event);
    }

  2. 捕获后退按钮按下,然后欺骗主页按钮按下。

  3. 捕获后退按钮按下,然后启动主屏幕的 Activity,有效地将我的应用程序的 Activity 置于停止状态。

编辑: 我了解服务,并且正在与此问题相关的应用程序中使用服务。这个问题专门关于将 Activity 置于停止状态而不是按下后退按钮时的销毁状态。


阅读 76

收藏
2022-05-20

共1个答案

小编典典

大多数时候,您需要创建一个服务来在后台执行某些操作,而您的可见Activity只是控制它Service。(我确信音乐播放器的工作方式相同,因此文档中的示例似乎有点误导。)如果是这种情况,那么您Activity可以finish照常运行,并且Service仍然可以运行。

一种更简单的方法是捕获Back按钮按下并调用moveTaskToBack(true),如下所示:

// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

我认为首选选项应该是让 Activity 正常完成并能够重新创建自身,例如在需要时从 Service
读取当前状态。但moveTaskToBack有时可以用作快速替代方案。

注意 :正如 Dave 所指出的,Android 2.0
下面引入了一种新onBackPressed方法,这些建议是关于如何处理后退按钮的。

2022-05-20