监听Android的Home键碰到的问题

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,已查看问题的所在。了解核心控件,事件的时候要相对深刻一点,尽量去思考实现机制,以便查处问题的所在!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值