重写后退按钮以充当主页按钮

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

在Android文档中,它指出:

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

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

我认为必须有三种可能性......

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

    @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);
    }
    
  • 捕获后退按钮,然后欺骗主页按钮按下。

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

  • 编辑:我知道有关服务,并在与此问题相关的应用程序中使用。 这个问题具体是关于在按下后退按钮时将活动置于停止状态而非已销毁状态。


    大多数情况下,您需要创建一个服务来在后台执行某些操作,而您可见的Activity只是简单地控制了该Service 。 (我确定音乐播放器的工作方式是相同的,因此文档中的示例似乎有点误导)。如果是这样,那么您的Activity可以像往常一样finishService仍将继续运行。

    更简单的方法是捕获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);
    }
    

    我认为首选选项应该是让活动正常完成,并能够重新创建自己,例如,如果需要从服务中读取当前状态。 但是moveTaskToBack可以作为一种快速替代方案。

    注意 :正如Dave在Android 2.0中指出的那样,引入了一个新的onBackPressed方法,以及关于如何处理Back按钮的这些建议。


    使用下面的代码:

    public void onBackPressed() {    
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        startActivity(intent);
    }
    

    如果你想捕捉后退按钮,请查看Android开发人员博客上的这篇文章。 它涵盖了在Android 2.0中执行此操作的更简单的方法,以及为在1.x和2.0上运行的应用程序执行此操作的最佳方法。

    但是,如果您的活动已停止,则仍可能会因设备上的内存可用性而被杀死。 如果你想让一个进程在没有UI的情况下运行,你应该创建一个Service 。 该文档说明有关服务的以下内容:

    服务没有可视化的用户界面,而是在无限期的后台运行。 例如,服务可能会在用户参加其他事务时播放背景音乐,或者可能通过网络获取数据或计算某些内容,并将结果提供给需要它的活动。

    这些似乎适合您的要求。

    链接地址: http://www.djcxy.com/p/19913.html

    上一篇: Override back button to act like home button

    下一篇: How do I cleanup an opened Process in Java?