当前位置: 代码迷 >> Android >> 监听Android的Home键碰到的有关问题
  详细解决方案

监听Android的Home键碰到的有关问题

热度:30   发布时间:2016-04-28 00:20:59.0
监听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,已查看问题的所在。了解核心控件,事件的时候要相对深刻一点,尽量去思考实现机制,以便查处问题的所在!

  相关解决方案