监听Android的Home键碰到的问题
监听Android的Home键碰到的问题
飞上北极星 发表于7个月前
监听Android的Home键碰到的问题
  • 发表于 7个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

AndroidTV监听Home键切换信源碰到的问题

 

实现的功能是按下Home键,焦点放到TV小窗口上,再次按下Home键,切换信源,进入另一个信源。在另一个信源的显示下,按下Home键,原信源视图缩小并显示当前信源。

 

这个需求的解决代码比较容易的。实现一个BroadCastReceiver,监听Home键。但是依照HOME键的实现的时候,系统会切换到当前Launcher,因此,在当前信源的情况下点击HOME键,走的流程是:

onPause->onStop->onRestart->onStart->onResume。

这是暴露给我们能够复写的函数,但是这里其实隐藏了一个很重要的细节。执行到onRsume的时候,系统应该是异步的切换AvtivityView,即显示当前默认LauncherView。因此在切换信源的时候,这个时间周期同步就可能出现问题。即,当焦点在TV小窗口的时候按下Home

android系统切换到当前Launcher

②切换信源,进入TV

或者②——>①,不能进入TV。这时候当前的LauncherView不会重绘,因此完全看不出来是已经切换了信源,又切回来的这么个过程。

 

之前一直有在各个周期函数中写下Log,检查无异样(所以据此猜测是异步执行View的重绘)。然后查看整个android系统的Log。在命令行中重定向:

adb logcat -v -f time > f:\adblocat.txt

以此来查看整个系统的log,发现在ActivityManager中有一次切换到当前的Launcher,因此解决这个问题。方法很简单,就是在BroadCastReceiver中新开线程并sleep一小段时间来强制系统切换Launcher在前,转换信源在后(即①——>②),这样便ok了。

 

总结,在多应用(信源)切换的时候,外接应用(jar)较多的时候要多看系统的log,已查看问题的所在。了解核心控件,事件的时候要相对深刻一点,尽量去思考实现机制,以便查处问题的所在!

共有 人打赏支持
粉丝 0
博文 140
码字总数 0
×
飞上北极星
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: