总结一次项目中切换速度的优化
来源:互联网 发布:足球比赛 编排软件 编辑:程序博客网 时间:2024/06/08 06:53
先上个示意图,
(产品市场平台为平板,在我这个720×1280的手机上有两处没适配好, 请先忽略 = =!)
场景是:
点击中间那一堆gridview,“红松”、“樟子松”之类的,下面的布局切换显示对应的数据;
1、改listview为自定义的行对象
首先,刚开始使用listview展示一行行的内容,但在getview里增加对株树的内容监听来自动计算蓄积值,包括对+1-1按钮增加的点击音效,每滑动都会调用getview来进行复用,滑动效果有点卡顿,所以这里把每一行看成一个对象,计算逻辑由对象处理,动态添加行对象到布局里,这样滑动起来就非常流畅了;
public class YdQiaomuOneLineView { private View view; public YdQiaomuOneLineView(Context context,List<Tree> list,int i, IdbHelper helper) { mContext=context; mDatas = list; position = i; this.helper = helper; helper.setTableName("eachWood"); view=View.inflate(context, R.layout.oneline_ydsur_qiaomu, null); //... } public View getView() { return view; }}
传入的参数用于其他功能,这里用getView()对外暴露行布局view,用于在动态添加到容器布局中;
/** * 新增一条布局 * @param one */ private void addOneLinearLayout(int position) { YdQiaomuOneLineView oneLineView = new YdQiaomuOneLineView(mContext, allTrees,position,helper); showViews.add(oneLineView); ll_container.addView(oneLineView.getView()); }
切换时布局不变,只读取数据传给行对象进行数据刷新即可;
(当然这里也是看具体情况的,需求径级为6~120,差值为2,有60行,不算多,如果有上千行那可能就会影响到界面打开时的速度了)
2、改变存储策略提高切换速度
之前的存储方式是传统的切换树种时将新数据保存到数据库,保存的过程有1~2秒时间,虽然是子线程+进度圆处理,但用户还反馈体验不佳,想达到秒切秒换的效果。
先来看下之前的方法:遍历集合取值更新
/** * 切换时保存,优化速度未用,改为输入即时更新 */ private void saveSmallType(){ Map<String, String> map = new HashMap<String, String>(); helper.setTableName("eachWood"); if (allTrees!=null && allTrees.size()>0) { for (int i = 0; i < allTrees.size(); i++) { map.put("id", allTrees.get(i).getId()); map.put("treeNum", allTrees.get(i).getTreeNum()+""); map.put("treeXuj", allTrees.get(i).getTreeXj()+""); helper.update(map); } } }
既然统一保存时间长,那可以化整为零,采用输入即时保存,用户每记录一个值就保存一次,这样保存操作由原来的1000ms拆分为10ms;
保存的活还是交给行对象本身处理:
m_tree_zs.addTextChangedListener(watcher);
private TextWatcher watcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { //保存逻辑就不贴了,都是业务类的东西 } };
到这里切换速度已经大大提升了,能够满足用户的需求了;
但再进一步分析,发现大部分用户只需要统计径级60之前的,60以后的树木很少很少,那么切换前后这些株树为0的行对象再进行刷新岂不是无用功;
所有,最后一步,第一次数据填充时每个行对象给自己的edittext设置tag,标记当前是否为0;
if (curTree.isEmtpy()) { m_tree_zs.setTag(true);}else { m_tree_zs.setTag(false);}
切换时满足切换前后都为0的条件,直接返回;
/** * 传入数据重置界面 * @param list * @param i * @param editable */ public void refreshData(List<Tree> list,int i,boolean editable){ Tree curTree = mDatas.get(position); if (((Boolean)m_tree_zs.getTag()) && curTree.isEmtpy()) { return; } //... }
这样,切换速度在我这个渣机上都能实现秒切了。
- 总结一次项目中切换速度的优化
- 一次关于切换场景的加载速度的优化的报告文档。
- iOS编译项目的速度优化
- android加载速度优化,通过项目的优化过程分析
- 总结一次失败的网站项目
- 项目中Angularjs遇到的问题和优化总结
- 项目中Angularjs遇到的问题和优化总结
- 项目中Angularjs遇到的问题和优化总结
- 页面速度优化个人总结
- php代码优化方法,加速运行速度的技巧总结
- php代码优化方法,加速运行速度的技巧总结
- 前端工程打开速度优化的循序渐进总结
- 前端工程打开速度优化的循序渐进总结
- php代码优化方法,加速运行速度的技巧总结
- 一次优化web项目的经历记录(一)
- 一次优化web项目的经历记录(二)
- 一次优化web项目的经历记录(三)
- UITableView性能优化-一次面试后的反思总结
- 连载笔记| k-近邻算法实战笔记(上)
- 从今天起,拒绝再做机器学习困难户
- matlab2010激活问题
- spring boot使用quartz定时器启动报错,但是定时器正常运行
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- 总结一次项目中切换速度的优化
- Java中FTP文件上传下载中文文件乱码问题
- spring boot对json 输入流数据拦截分析处理
- Android Butterknife 8.4.0 使用方法总结
- MindManager 2018计划视图基本操作
- 程序员 30 岁前,该如何规划自己的职业发展?
- Javascript-数组
- Git还原历史版本
- android悬浮按钮简单可拖拽