一周学习工作总结:
2015-11-12 15:13
513 查看
1.android textView优化 加载方式理解
textView是安卓中诸多视图的父类,方法多样,实现灵活,基于textView可以实现很多功能,提升textView效率便十分重要。优化方案如下:
预渲染:首先初始化配置做缓存,预计宽度和文字大小之后,用配置好的代码进行渲染。
原理:
textview显示在视图中的流程如下,首先调用meature方法计算textView的长度和宽度,然后调用layout方法,将textView显示
在父布局相应位置。
textView具有动态调整宽度和行数的功能,计量行数时,首先判断其是否为单行isBoring,如果是单行则调用BoringLayout作为
布局,将其显示在一行内,如果是非单行但是有最大长度限制,则使用StaticLayout来调整布局,使其显示特定文字,如果没有长
度限制,则使用DynamicLaout,使textView调用Layout.draw方法,一行一行渲染文本。
具体方案
重写 onDraw onMeasure onLayout 方法,缩减每个具体textView加载工作,加快每帧渲染效率。
参考链接:
http://ragnraok.github.io/textview-pre-render-research.html
参考项目:
https://github.com/ragnraok/StaticLayoutView
2.ViewGroup优化:优化item,优化整个adpater,加速listView加载。
如果一个item过于复杂,可以将其拆分成多个小的item。问题:掉帧(系统每隔16.7ms发出渲染信号,应在16.7ms完成应用逻辑,使系统达到60fps每秒)
listView被加入布局时,adapter的getview方法将被回调。在16.7ms内,可见listview的getview方法被按照顺序执行,
一旦包含复杂控件,16.7ms无法完成渲染,用户便只能看到上一帧的效果,这时就发生了掉帧,尤其在中低端设备,
16ms渲染很困难。
解决方案:
getView方法中每个View进行拆分。例如facebook、微博每条博客信息包含
1)头部:用户名、用户头像、发送时间、操作按钮;
2)内容页:用户发送的文字和表情、转发人文字、最初创作人的文字、图片、视频等九宫格信息。
3)底部操作:点赞、转发、评论等操作功能。
其中,底部、头部布局相同、内容页信息变化较大,将一条完整信息作为一个getView的View布局,在有些设备上容易
发生掉帧,可以采用拆分布局方式,adpter将视图类型设置为3种,头部、内容页、底部操作,各作为单个View,获取
一条博客信息时,一条信息完整显示实际调用getView方法三次;
同时头部、底部信息重用较多,每次只有内容页会动态加载,粒度更小,相应速度也更快。
参考链接:http://blog.aaapei.com/article/2015/02/facebookxin-wen-ye-listviewyou-hua
3.js进行信息校验、回退等功能
项目中需要对身份证、手机号进行校验,代码如下:function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "}; var tip = ""; var pass= true; if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){ tip = "身份证号格式错误"; pass = false; } else if(!city[code.substr(0,2)]){ tip = "地址编码错误"; pass = false; } else{ //18位身份证需要验证最后一位校验位 if(code.length == 18){ code = code.split(''); //∑(ai×Wi)(mod 11) //加权因子 var factor = [ < 4000 span class="hljs-number">7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; //校验位 var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]; var sum = 0; var ai = 0; var wi = 0; for (var i = 0; i < 17; i++) { ai = code[i]; wi = factor[i]; sum += ai * wi; } var last = parity[sum % 11]; if(parity[sum % 11] != code[17]){ tip = "校验位错误"; pass =false; } } } //if(!pass) alert(tip); return pass; } $container.on('click', '#check', function () { $text1 = $('#text1').val(); $text1 = $.trim($text1); $text2 = $('#text2').val(); $text2 = $.trim($text2); //$showDialog1=true; $showDialog2=true; //if($text1.length == 11) //{ // $showDialog1=false; //} $select =$('#select2').val(); //手机号,只需要校验前三位 if($select ==1 && ($text2.length==11 || $text2.length==12 )) { if((/^1[3|4|5|7|8][0-9]\d{4,8}$/.test($text2))){ //alert("不是完整的11位手机号或者正确的手机号前七位"); //document.mobileform.mobile.focus(); //return false; $showDialog2=false; } } else if($select ==2 && ($text2.length==15 || $text2.length==18 )) { $res= IdentityCodeValid($text2); if($res) { $showDialog2=false; } }else if($text2.length == 0) { $showDialog2=false; } //检查位数 /* if($showDialog1 ) { $('#dialog1').show(); $('#dialog1').find('.weui_btn_dialog').on('click', function () { $('#dialog1').hide(); }); } else */ if($showDialog2 ) { $('#dialog2').show(); $('#dialog2').find('.weui_btn_dialog').on('click', function () { $('#dialog2').hide(); }); } else{ $("form").submit(); } }); ... javascript'''
js实现返回上一页功能:
$container.on('click', '#backbtn', function () { window.history.go(-1); }); ... javascript'''
4.html5日历选择期在ios系统中不可用
原代码:<input type="date"> ... html'''
改为选用此框架:http://www.lovewebgames.com/jsmodule/mobile-select-date.html
更改日期分隔符1920/01/01 为1920-01-01,在js文件中将所有表示日期分割的符号“/”都修改为“-”。
**注意:**test,
* = =*。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories