码迷,mamicode.com
首页 > 移动开发 > 详细

监听Android的Home键碰到的问题

时间:2015-06-19 18:49:31      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:android   android开发   broadcastreceiver   launcher   异步   

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

监听Android的Home键碰到的问题

标签:android   android开发   broadcastreceiver   launcher   异步   

原文地址:http://blog.csdn.net/feishangbeijixing/article/details/46563549

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!