特别说明:
1.zyphio原创文章,转载请注明作者和出处;
2.因为加入TWRP Recovery进行测试,得出一些新的观点,特此更新,2014年1月19日;
3.以下文章中的“M”的赋值,在CWM Recovery中M=1.33,在TWRP Recovery中M=1.0。


发现从网上下载的众多Android手机卡刷包在刷机时,进度条的显示很混乱。有的刷机时没有进度条,有的显示超出屏幕,即使有显示,也大多与实际工作进度不符,而这个问题涉及到Android recovery zip刷机包中的updater-script里的两个函数——show_progress和set_progress。本人搜索了一下国内的资料,发现对这两个函数的解释都源自一份“Edify语法简介”的翻译,参数说明的表达也很模糊。为此,我搜索了一下国外的资料,本人水平有限,源码看不太明白,但发现国外也已经有人提出来Edify中这两个函数的设计并不算很完善。后来在xda-developers论坛中看到有人通过实验去探索这两个函数的正确用法,虽然结果也不算太完美,但他的测试方法给我很大启发。为此我测试了近30种写法,总算得出这两个函数的效果相对好的使用方法(当然,受不同Recovery的影响,不排除有些情况我没测试到,功能理解上可能也不算全面,难免有错漏,还望各位指正)。



一、函数详解


函数语法:
show_progress(frac, sec)
用途:
显示其下一行代码至下一个show_progress之间的所有命令代码执行进度。
参数详解:
frac 进度条增减值,取值在0至M间,多条show_progress的情况下,这个值累积起来不要大于M(除非用set_prograss执行进度退回),否则显示的进度条会超出进度条边框甚至超出屏幕,最好累积等于M就刚好进度全满,此值不可以是负数;
Sec 至下一个show_progress之间的所有命令代码执行所耗时间的预测值,以秒为单位,也相当于进度条增减值frac动态走动所用时间,如果这个预测值小于代码实际执行所用时间,则进度条停止,等待代码执行完成;如果大于,则进度条会跳跃前进。


函数语法:
set_prograss(frac)
用途:
set_prograss(frac)命令执行时,进度条指示的进度。
参数详解:
frac 进度值,取值最小0.0,取值最大M。


二、区别对比


show_progress可用于分段动态显示进度,每一段进度条走动是动态增减,即从一点匀速走动到另一点;
set_progress可用于分段静态显示进度,每一段进度条走动是跳动的,可从一点直接跳动到另一点。


三、使用提示


1.经过多次测试后发现,TWRP Recovery对show_progress函数的支持可能存在问题,每一次有动态进度效果,但也显示不正确,如果不重启,则随后刷入的刷机包中若含有show_progress函数,则都无效,进度条直接显示全满(到来像是TWRP Recovery的bug)。所以在TWRP Recovery,推荐只使用set_progress函数,才不会出现第二次刷入时进度条显示全满的问题。
2.适用于CMW Recovery的刷机包,要纯粹表示刷机进度的话,推荐优先或仅使用show_progress函数,能有很好的动态进度效果。
3.为了重新定位进度值,或表示卸载,或者是多重进度等,例如,为了让进度从100%往回走到0%,或100%后再从0%再走一次等特殊、复杂需要,好像只能使用set_prograss函数。
4.这二个函数混用小心些,容易进度没显示或进度错乱,甚至脚本出错。


四、实际例子


本例子适用CMW Recveory,其中show_progress的预测值小于代码的实际执行时间,若“大于”则会有进度跃进的效果。


ui_print(" ");ui_print("PROGRESS BAR USAGE");ui_print("Powered by zyphio");ui_print("2013-12-17");ui_print("");show_progress(0.1, 1);ui_print("  Please Wait ...");sleep(2);show_progress(0.6, 8);ui_print("  Updating system ...");sleep(10);show_progress(0.3, 4);ui_print("  Updating data ...");sleep(6);show_progress(0.1, 2);ui_print("  Updating cust ...");sleep(4);show_progress(0.1, 2);ui_print("  Updating boot ...");sleep(4);show_progress(0.13, 1);ui_print("  Please Wait ...");sleep(2);ui_print("");ui_print("  Completed!");





更多相关文章

  1. Android热修复技术总结
  2. Android(安卓)Studio显示行数
  3. android双屏显示的一些修改与尝试
  4. Android获取并显示图片
  5. Android中使用ps命令查看进程PID
  6. Android(安卓)P zygote 原理分析之app_process
  7. android 三档开关做法
  8. 完全理解android事件分发机制
  9. Looper中的睡眠等待与唤醒机制

随机推荐

  1. Android TextView自带padding 10dp问题
  2. js代码
  3. Android动作广播类别消息类型
  4. android 根据TextView宽度 自动缩小字体
  5. android > APK更新
  6. Compile Busybox for Android
  7. android spinner 选中后显示字体的颜色设
  8. android window.requestWindowFeature()
  9. android webview 中网页数据与js交互
  10. java.lang.NullPointerException Attempt