QQ空间分享取消按返回键回退后当前页面被关闭了-----onKeyUp,onKeyDown,onBackPressed

最近在做QQ,微信分享的弹窗改版。发现了一个bug,找了3天,终于解决,小记一笔。

bug如下:

    选择分享到QQ好友,打开QQ好友列表页,此时如果不想分享,点击手机下方的返回键,返回应用页面,一切正常。如果同样的操作,选择的是分享到QQ空间,不想分享,点击手机下方的返回键,返回应用页面,当前页面被关闭了。

初步原因:

   当前页面是webview,拦截了返回键,做业务上的处理,原来是用的方法是onKeyUp。★通过返回键★,关闭QQ空间分享页面,当前页面onKeyUp方法被调用了。导致webview有历史记录回退,没历史纪录当前页面被关闭。

百度onKeyUp方法:


注意:onKeyUp,默认返回false,不会被任何的该Activity内的任何view处理。

所以,QQ空间分享页面没有处理onKeyUp,而QQ好友分享页面处理了。处理了,消费了,一切正常。没处理,QQ空间分享页面关闭肯能是写在onKeyDown里面,之后onKeyUp就在我们的webview页面被调用了执行了。onKeyDown和onKeyUp是两个分开的事件,并且会向上个页面传递。

next:

把onKeyUp换成onKeyDown,一切都正常了,说明QQ,微信都处理了onKeyDown。


总结:

花了3天,第一天抱着侥幸的心理,这改改,那改改,每改一个地方,执行一遍,都不行,升级了SDK,还是不行,花了许多时间,没使用大脑思考,以为走捷径,反而浪费了更多时间。第二天冷静分析了肯能出错的地方,排除法后,有了方向,可能出在webivew或者activity的回调方法里面。第三天确定是activity的onKeyUp方法。

    以为结束了,伟哥说最好写在onBackPressed方法了,那么问题又来了,onBackPressed和onKeyDown有什么区别呢?

继续百度:

参考文章一:https://www.cnblogs.com/popfisher/p/5191245.html

Activity返回键控制的两种方式

1、覆写Activity的OnBackPressed方法

@Override
public void onBackPressed() {
  // 完全由自己控制返回键逻辑,系统不再控制,但是有个前提是:
  // 不要在Activity的onKeyDown或者OnKeyUp中拦截掉返回键

  // 拦截:就是在OnKeyDown或者OnKeyUp中自己处理了返回键
  //(这里处理之后return true.或者return false都会导致onBackPressed不会执行)

  // 不拦截:在OnKeyDown和OnKeyUp中返回super对应的方法
  //(如果两个方法都被覆写就分别都要返回super.onKeyDown,super.onKeyUp)
}

2、覆写Activity的onKeyDown或者OnkeyUp,拦截返回键

参考文章二:https://blog.csdn.net/dalancon/article/details/12042833

注意:

1.OnBackPressed方法 ,发现返回键的所有事件都不会向上传播了(传递到上一层页面),如果你想向上传播 请使用OnkeyDown事件或OnkeyUp事件。

2.OnkeyDown事件 和OnkeyUp事件是不同事件,可以分别向上传播了。 


最后,在伟哥的指导下,把这个问题彻底弄清楚。完成了这篇简陋但真实的工作随笔,学习伟哥不断探究的精神,并记录总结。不要完成最基本的工作任务后啥也不想啥也不管了。严于律己!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值