安卓桌面小部件Widget的局限性及适用性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓桌面小部件Widget的局限性及适用性相关的知识,希望对你有一定的参考价值。
参考技术A 一、Widget并不支持所有的控件跟布局,而仅仅只是支持android布局和控件的一个子集。(当然也不支持自定义View)1.支持的布局:
2.支持的控件:
二、Widget不支持Animation动画。
1.可以通过Bitmap、layoutAnimation和帧动画实现动画效果:
用这些方式虽然可以实现简单的动效,但是非常容易产生内存溢出问题,导致OOM和闪退。归根结底,Widget的设计是主打轻量化,需要长期放在桌面的Widget如果有大量动效,将会耗费大量系统性能和电量,这与它的设计初衷是相违背的。
2.动画效果和方位传感器测试:
动效:使用 setImageViewBitmap 方法设置简单的旋转动画,动画会在两分钟后停止播放。
传感器:在应用进入后台,执行 onStop 方法时,方位传感器会在一分钟后停止监听回调,此时后台Service正常运行,Widget时间正常更新,但是方位传感器不再回调监听。(经测试,开启前台Service才可以正常监听)
总结:非常不建议Widget需要动画或者调用传感器展示,在部分手机上会提示耗电异常,强制杀死程序。
三、进程保活:
进程保活涉及到的问题非常复杂,且越来越严格。测试了三款APP:
顺历:清除后台任务后Widget时间停止更新。
万年历:正常更新。
中华万年历:正常更新。
总结:顺历未设置保活方案,或保活失败。
万年历与中华万年历监听了系统时区改变广播、时间手动设置广播,在手动设置时间或时区后这两个Widget也同步更新。同时还有一个时间正常流逝的广播,系统每分钟会发送一次,但是这个广播在8.0系统以后不允许静态注册,也就是只能在APP运行的情况下才能监听这个广播。尚不清楚这两个APP如何保活,或是如何在8.0以上系统监听这个广播,达到即便杀死后台,也能每分钟刷新Widget时间的目的。
关键词“轻量化”
1.因为Widget主打轻量化,对动效支持较差,所以Widget界面以静态界面为主。
2.支持的布局和控件非常少,不支持自定义View,界面以简易布局为主。(如图片+文字)
3.实时性要求不高。(如每日一首古诗)
4.与用户简单互动。(如播放器的播放、暂停、下一曲)
以上是关于安卓桌面小部件Widget的局限性及适用性的主要内容,如果未能解决你的问题,请参考以下文章