Android中Back键与Home键的区别

来源:互联网 发布:2017网络项目 编辑:程序博客网 时间:2024/04/30 13:54

转自: Android中Back键与Home键的区别 


KeyEvent.KEYCODE_BACK

back键默认行为是finish处于前台的Activity,将该task从栈中弹出。即Activity的状态为Destroy状态为止,再次启动该Activity是从onCreate开始的(不会调用onSaveInstanceState方法)。

KeyEvent.KEYCODE_HOME

Home键默认是stop前台的Activity即状态为 onStop为止而不是Destroy,若再次启动它,会调用onSaveInstanceState方法,不过个人认为不排除因为内存而被回收的可能,这只能将这个task保存到栈中。保持上次Activity的状态则是从 OnRestart开始的---->onStart()--->onResume()。

        if (keyCode == KeyEvent.KEYCODE_HOME) {            // If a system window has focus, then it doesn't make sense            // right now to interact with applications.            WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;            if (attrs != null) {                final int type = attrs.type;                if (type == WindowManager.LayoutParams.TYPE_KEYGUARD                        || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {                    // the "app" is keyguard, so give it the key                    return false;                }                final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;                for (int i=0; i<typeCount; i++) {                    if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {                        // don't do anything, but also don't pass it to the app                        return true;                    }                }            }                        if (down && repeatCount == 0) {                if (!keyguardOn) {                    mHandler.postDelayed(mHomeLongPress, ViewConfiguration.getGlobalActionKeyTimeout());                }                mHomePressed = true;            }            return true;        }

屏蔽HOME键的做法

    @Override    public void onAttachedToWindow()    {           this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);               super.onAttachedToWindow();    }}


原创粉丝点击