悬浮窗开发的总结

1、动画和点击区域问题

可以使用hide方法viewTreeObserver下的方法进行窗口裁剪实现局部透过点击事件,这样在动画的时候就不需要考虑进行window大小变化了

2、 启动慢的问题

1)由于悬浮窗启动一般使用的是service启动,通过分析ams可以发现,在进行activity启动的是有进行powehint操作的,而一般的service是没有的,如果系统是自家的可以考虑在启动自己的服务的时候加上powerhint操作

2)使用startforgroundService的方式提高进程的优先级

3) 考虑使用异步layoutinfler来实现在applictaion创建时候就着手准备view

3、偶现UI不刷新,但没有anr

这个问题,赶紧查查进程的OOM_ADJ,大概率是优先级过低,得不到系统的资源调度问题

4、监听横竖屏的变化

service有回调可以知道横竖屏幕,其次就是悬浮窗的Window设置成填满屏幕,监听layout的变化

5、拦截window的touch事件,发现不要的话再派发给下一层window

通过分析inputmanagerservice,可以知道,别想了,没有这个方法,要么吃要么不吃不能吃了吐出来,除非发改framework,或者主动进行事件注入(系统权限下也许可行?,但得考虑是否会被自己拦截)

6、监听按键信息

监听按键信息必须得有焦点,通过view的onkeyEvent即可收到

7、按键音量+和音量-出现音量条

activity的实现是在phonewindow里,调用了 audiomanager里的方法,悬浮窗实现需要自己监听按键信息自己实现