安卓桌面小部件Widget的局限性及适用性

局限性

一、Widget并不支持所有的控件跟布局,而仅仅只是支持Android布局和控件的一个子集。(当然也不支持自定义View)

1.支持的布局:

FrameLayout,LinearLayout,RelativeLayout,GridLayout。

2.支持的控件:

AnalogClock,Button,Chronometer,ImageButton,ImageView,ProgressBar,TextView,ViewFlipper,ListView,GridView,StackView,AdapterViewFlipper。


二、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.与用户简单互动。(如播放器的播放、暂停、下一曲)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容