聊聊android nuwa热修复Nuwa有哪些坑

& Android培训班之2016最火的Android技术
&|&nbsp &|&
&|& &|& &|&
&|& &|& &|&
&|& &|&&|&
&(您是本帖的第&242个阅读者,共0个回复)
7级, 积分 1077, 距离下一级还需 923 积分
7级, 积分 1077, 距离下一级还需 923 积分
时空币512 SKB
时空金币0 SKG
威望值0 点
时空年龄157 岁
签到天数: 32 天[LV.4]偶尔看看III
已有 147 个用户关注TA
如今发展最为迅速的移动开发技术Android开发领域,不断有着新技术更新换代面向大众。面对GitHub上琳琅满目的项目,不断有人Mark,还有人在分享自身的心得,不管怎么样,如果能让你真的有所学习有所收获,我们的目的也就达到了。
& && &&&浅谈Android培训班之
& && &&&1、DataBinding
& && &&&今年的 Google IO 大会上,Android 团队发布了一个数据绑定框架(Data Binding Library)。Data Binding Library 是一个 support 库,支持 Android 2.1+ 版本 (API level 7+)。
& && &&&在2015年,它还是beta版本,但是就 Android Studio 2 的 Preview 版本发展来看,Google 在这个库上还是很花心思的,我们有理由相信,在2016年 DataBinding 将会迎来第一个正式版。
& && &&&2、MVP模式
& && &&&MVVM 与 MVP 模式,正在 Android 开发中越来越流行。在这里为大家强烈推荐我的:TheMVP 项目,可以直接引入项目作为 module 依赖。(详情请在 github 搜索 TheMVP )
& && &&&3、热修复
& && &&&在2015年,涌现出了一大批热修复动态加载技术:HotFix、Nuwa、DroidFix、AndFix 等等,以及同样原理的插件化技术:DroidPlugin、DynamicAPK。就连 Android Studio 2 的 Preview 版本中体现的 Instant Run 功能,本质上也是一种热修复技术。我猜想,在2016年一定会有基于 Instant Run 思想做出的热修复技术涌现。
& && &&&扣丁学堂专注于Android培训开发领域,时刻追踪和更新Android领域最新技术发展。保证让学员可以在扣丁学堂学到高质量、高实用的Android技术。同时在扣丁学堂从零开始学Android开发的新手同样可以根据讲师设计的学习路线慢慢精通Android开发技术。
• • • • • •
网友以上言论仅代表其个人观点,不代表本站立场。如涉及侵权,请提供相关证据给管理员进行处理。
5月28日至5月29日,约你来钦州钻石海岸国际度假村混帐。荧光露营、帐篷市集、篝火狂欢、亲子互动、绿色骑行……你能想到的花样这里都有,就等着你来赴宴啦!
| | 总机:&&市场业务合作:&&&&论坛事务受理:
&&交易版块业务:
时空网法律顾问:广西观复律师事务所 文伟律师
&&&&违法和不良信息举报电话:-666
南宁创高营销广告有限公司
版权所有  &&& 经营许可证编号:桂B2-android开发游记:SpringView 下拉刷新的高效解决方案,定制你自己风格的拖拽页面
关于下拉刷新/上拉加载更多的解决方案网上已经有很多了,浏览了目前主流的下拉控件比如PullToRefresh库等,第一:大多数实现库都难以进行动画和样式的自定义。第二:不能很好的兼容多种滚动控件,它们都对listView、RecyclerView等进行了不同程度的重新实现,你在项目中就得使用库提供的PullToRefreshListView、PullToRefreshRecyclerView等来代替源生的listView、RecyclerView等,这样的方式其实并不好,随着android版本的不断升级源生的listView、RecyclerView也不断加入新特性和对之前bug的修改,这使得三方实现的控件很难跟上google的节奏,当源生listView已经更新多个版本之后,三方的ListView可能还在使用低版本的实现方式。
基于如上两个原因,我开始着手开发SpringView(弹性View)
SpringView有哪些优点?
能对header/footer(头部/尾部)的样式和动画进行高度自定义,单独将header/footer独立出来,几乎可是实现任何你想要的效果,只需要继承BaseHeader/BaseFooter实现对应接口就可以。
能动态地替换header/footer,只需要设置不同的头尾即可:springView.setHeader(MyHeader());
在不重写源生控件的情况下,完美支持系统源生的listView、RecyclerView、ScrollView、WebView等,你依然使用google提供的官方控件,SpringView完全不做干涩。
使用简单,对于简单的需求甚至不用写任何代码,只需要在布局中为SpringView设置header=&@layout/&&属性即可。
SpringView是非常轻量级的实现,控件本身只有一个类
SpringView支持多点触控,可以两只手连续拖拽,你可以定制一些趣味的动画(例如demo5的仿acfun效果)
SpringView提供了2种拖拽方式(重叠和跟随),可以动态地切换
SpringView为不想去自定义头/尾的懒人提供了7种默认的实现(模仿了阿里,腾讯,美团等多种风格)如下,还会继续增加
如何使用 SpringView?
源码及demo下载 gitbub:
在布局文件中添加SpringView,并把你想要拖拽的控件放在SpringView中,给SpringView添加app:header=&@layout/&&属性,设置一个自己编写的头部的布局即可(footer同理):
这样,最基本的实现就完成了,运行看看吧。
当然,你也可以不再布局中设置,使用代码动态添加:
//DefaultHeader/Footer是SpringView已经实现的默认头/尾之一
//更多还有MeituanHeader、AliHeader、RotationHeader等如上图7种
springView.setHeader(new DefaultHeader(this));
springView.setFooter(new DefaultFooter(this));
刷新和加载更多的事件处理
如果需要处理的话,只需在代码中添加监听:
springView.setListener(new SpringView.OnFreshListener() {
public void onRefresh() {
public void onLoadmore() {
详细的你可以看下几种默认实现的Header源码,这里只简单介绍下:
我们要做一个简单的能够记录拖拽了多少次的Header。
首先新建一个自定义头部布局,就是在RelativeLayout中放一个TextView啦:
接着,新建一个MyHeader基础自BaseHeader:
public class MyHeader extends BaseHeader{
//获取Header
public View getView(LayoutInflater inflater, ViewGroup viewGroup) {}
//拖拽开始前回调
public void onPreDrag(View rootView) {}
//手指拖拽过程中不断回调,dy为拖拽的距离,可以根据拖动的距离添加拖动过程动画
public void onDropAnim(View rootView, int dy) {}
//手指拖拽过程中每次经过临界点时回调,upORdown是向上经过还是向下经过
public void onLimitDes(View rootView, boolean upORdown) {}
//拉动超过临界点后松开时回调
public void onStartAnim() {}
//头部已经全部弹回时回调
public void onFinishAnim() {}
注释已经很清楚了,其中必须实现的方法是getView(),将头部的View实例返回给SpringView,其余方法有需求就实现。
实现getView()方法,添加一个成员变量保存头部中的TextView:
private TextView textV
public View getView(LayoutInflater inflater, ViewGroup viewGroup) {
View view = inflater.inflate(R.layout.header_my, viewGroup, true);
textView = (TextView)view.findViewById(R.id.textView);
实现onLimitDes方法,在每次经过临界点时改变TextView的内容:
private int i = 0;
public void onLimitDes(View rootView, boolean upORdown) {
textView.setText(&this is TextView &+i);
OK,在Activity中为SpringView设置我们自定义的MyHeader就可以了,再设置一个监听器,在刷新和加载更多的时候等待1秒调用onFinishFreshAndLoad()结束刷新动作。
springView = (SpringView) findViewById(R.id.springview);
springView.setHeader(new MyHeader());
springView.setListener(new SpringView.OnFreshListener() {
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
public void run() {
springView.onFinishFreshAndLoad();
public void onLoadmore() {
new Handler().postDelayed(new Runnable() {
public void run() {
springView.onFinishFreshAndLoad();
这样就完成了一个简单的自定义Header,Footer同理。
如何自定义最大下拉高度,临界高度,和回弹高度
在BaseHeader(BaseFooter同理)中默认已经实现3个方法,分别返回的是临界高度(limit hight),下拉最大高度(max height),下拉弹动高度(spring height):
如果有更加复杂的需求,需要更改这些高度的话,就在自己的Header中重写这些方法,注释已经很清楚了:
public abstract class BaseHeader implements SpringView.DragHander{
* 这个方法用于设置当前View的临界高度(limit hight),即拉动到多少会被认定为刷新超作,而没到达该高度则不会执行刷新
* 返回值大于0才有效,如果&=0 则设置为默认header的高度
* 默认返回0
public int getDragLimitHeight(View rootView) {
* 这个方法用于设置下拉最大高度(max height),无论怎么拉动都不会超过这个高度
* 返回值大于0才有效,如果&=0 则默认600px
* 默认返回0
public int getDragMaxHeight(View rootView) {
* 这个方法用于设置下拉弹动高度(spring height),即弹动后停止状态的高度
* 返回值大于0才有效,如果&=0 则设置为默认header的高度
* 默认返回0
public int getDragSpringHeight(View rootView) {
到这里,SpringView的使用方法基本介绍完了,后面的文章会陆续从源码介绍SpringView的实现,和自带的各种默认Header的实现。
下载请移步gitbub:
觉得不错的话,下面有个赞可以点一下:)
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 nuwa aar 热修复 的文章

 

随机推荐