微信和QQ按back键不松开就最小化之原因探秘

大家有没有发现,Android版微信和QQ,按back键的时候,只要按上(还没松手),程序就最小化了。而别的APP都是要松开back键时才最小化。如果是普通人使用起来肯定没感觉,但是作为一名安卓程序员,我不能忍啊,我想知道为什么微信QQ和别的APP不一样啊。我疑惑了很久,今天有时间,决定揭开这个秘密。

我刚开始猜测,是微信注入了某些代码到系统里,可以监听back键的down和up事件,但是一想,这太麻烦了吧。微信没理由非要区分down、up啊。
所以后来就猜测,是在onKeyDown里做了某些处理。

于是写了个DEMO 跑了一下,结果发现达不到我想要的效果。中间各种尝试(此处省略一万字),终于找到了实现方案:

 

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            // 这里可以 To do something
            finish();
            return true;
        }
        return super.onKeyDown(keyCode, keyEvent);
    }

}

哈哈,原来如此,拦截back键,并finish() 了。自然就相当于down事件处理了。

 

其实并不觉得这是好的体验,个人觉得这算是一个bug 。只是没人去较真,所以微信也没当做bug 处理。
那问题来了。如果既想要拦截back键,又不想像微信这样在down 的时候就最小化了,那该怎么做呢,可以这么做:

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onBackPressed() {
        if (XXX){
            // 这里可以 To do something
        }else {
            super.onBackPressed();
        }
    }
}

对了,再补充一句,如果想模仿微信实现不销毁根Activity,再次打开还是上次的状态,也很简单,只需要在上面的back键拦截那里加上这么一行代码即可:

moveTaskToBack(true);

或者:

  @Override
  public void onBackPressed() {
    Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
    launcherIntent.addCategory(Intent.CATEGORY_HOME);
    startActivity(launcherIntent);
  }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值