一些开源框架的机制是什么?
RxJava是使用Java语言,以响应式编程思维来进行编程的Java类库。 ####2.Butterknife的机制是什么? 巧妙运用Java注解,能运用注解建立在 Java Annotation Processing技术上,在Java代码编译成Java字节码的时候就已经处理了@Bind、@OnClick等注解
Annotation Processing是Javac中用于编译时扫描和解析Java注解的工具 Annotation Processing是在编译阶段执行的,它的原理就是读入Java源代码,解析注解,然后生成新的Java代码 新生成的Java代码最后被编译成Java字节码,注解解析器(Annotation Processing)不能改变读入的Java类,比如给Java类添加方法或者删除类中的方法。
一些网络框架的对比与总结:
1.XUtils 此框架庞大而周全,这个框架可以进行网络请求、图片加载、数据存储以及View注解。使用这个框架很方便,这样会是的你的整个项目对它的依赖性太强,这就存在一个问题,万一以后这个库不在维护了,或者使用过程中某一个模块不能满足我们的需求,那后果就不敢设想了。要知道想要修改这个库里面的某一个模块,来满足自己项目的需求,从各个方面来说都是有难度的。
2.Volley 这个框架是Google官方提供的一个轻巧的网络请求框架,适合进行数据量小,发送请求比较多的情况。这个框架的扩展性很强,完美支持HttpClient、HttpUrlConnection。而且Volley中封装的有ImageLoader,对于有图片加载需求的可以通过Volley内置的图片加载框架完成需求。不过对于复杂的需求建议还是使用专门的图片加载框架(Glide or Fresco or Picasso框架都是不错的选择)。对与Volley的缺陷就是,它不适合进行post数据量较大的请求。
3.OKHttp 目前HttpClient已经被废弃,android-async-http框架是基于HttpClient的,所以异步请求框架也就不在维护了。另外保留的可以直接进行网络请求的就是使用HttpUrlConnection。 OKHttp是Square公司开源的针对Java和Android程序封装的一个高性能的http请求库,经历了1、2、3个版本。它的职责就是和HttpURLConnection一样,支持spdy、http2.0、webSocket,支持同步、异步,而且OKHttp又封装了线程池,封装了数据转换,封装了参数使用,错误处理等。API使用起来很方便,可以把这个框架理解成一个封装之后的类似HttpURLConnection的东西,但是在使用的时候仍需要自己再做一层封装,这样才能有成就感,使用起来也会更加顺手。
4.Retrofit Retrofit 是Square公司出品的默认基于OKHttp封装的一套RESTful网络请求框架,RESTful是目前流行的一套API设计风格,并不是标准。Retrofit里面涉及到一堆的设计模式,可以通过注解直接配置请求,可以使用不同的http客户端,虽然默认是用http。在序列化数据方面,可以使用Json Converter来序列化数据。同是提供对Rxjava的支持,开发中经常见到的组合方式是:RxJava + Retrofit + Gson + Dagger2 或者 Rxjava + Retrofit + Gson + OKHttp + Dagger2 在使用这个组合框架的时候,建议大家还是要先看看基础的用法,这样在使用过程中如果出现问题也能更好的解决。另外建议:如果你使用Dagger2不熟练的话可以考虑去掉Dagger2(如果你的项目周期比较紧张,没有时间去学习了解Dagger2的话),记得有一个项目就是没有使用Dagger2,使用起来相对麻烦了点,但是逻辑相对比较清晰(这样说是因为当时刚接触Dagger2,不熟练,所以觉得逻辑乱,后来就觉得还是有Dagger2 比较好~~不喜勿喷!)。 这里多少一点:Retrofit2.0要比Retrofit1.0好用很多,想知道他们之间区别的朋友可以去查下资料,反正LZ是有了2.0就不想用1.0了。
总结:
开发中建议使用框架顺序排列: Retrofit – OKHttp – Volley(其实这个要看你们项目中单个请求的数据量) – XUtils(这个库比较庞大,功能也很牛X,一般的小项目我觉的可以不用使用这个,从安装包体积和需求实现建议程度上考虑)
提升逼格的一些point
首先说一下什么是ORM框架:
所谓ORM框架就是:对象-关系映射(Object/Relation Mapping)的简称。它是随着面向对象的软件开发方法发展而产生的。面向对象的开发方式是当今企业级应用开发环境中的主流方式,关系型数据库是企业级应用环境中持久化数据的存储方式。对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多的关联关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序中对象到关系数据库数据的映射。
下面说一下ORM方法论基于的三个核心原则:
简单性:以最简单的形式建模数据 传达性:数据库结构被任何人都能理解精确性:基于数据模型创建正确标准化的结构一般ORM包括以下四部分:
一个对持久类对象进行增删改查操作的API 一个对类和类属性相关的查询的API一个规定Mapping Metadata的工具一种技术可以让ORM的实现同事务对象一起进行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其他的优化操作作为Android开发者,下面的这些我们要知道:
ORMLite 使用教程有很多,给大家推荐一个:http://blog.csdn.net/lmj623565791/article/details/39122981 GreenDao 想要学习的点击:http://www.jianshu.com/p/2f7f48563141 。3.0版本之后,注解变少了。缺点:体积稍微大一些AndroidActive 注解 稍多首先Service的派生类有很多(原生的,不包含用户自己写的service类)
1.InputMethodService 输入法服务 2.MediaBrowserService 媒体浏览器服务 3.SpellCheckerService 拼写检查的服务 4.IntentService 用来处理异步请求的service。这个是开发中经常用到的service(提醒:部分敲代码的习惯性的认为Service就是在后台处理耗时的操作的!!!在这里提醒大家,service默认是运行在UI线程的。之前面试过几个人,每次问到Service的时候,他们给我的感觉是Service就是后台的一个非UI线程)
执行条件:
1.当前activity的实例已经存在 2.当前Activity的启动模式是SingleTask 或者 SingleInstance,当前activity被开启的时候 3.当前activity的启动模式是SingleTop且当前activity正在显示,此时当前activity又被开启的时候
答案:会执行
原因:startActivity()方法中其实也是调用startActivityForResult()方法,requestCode = -1而已。
Fragment不能独立存在,它必须嵌入到activity中。而且Fragment的生命周期直接受所在Activity生命周期的影响。生命周期:http://www.jianshu.com/p/04a1b2b2aa29
1:JavaSisst
2:AspectJ
3:Xposef 链接: http://mp.weixin.qq.com/s?__biz=MzA3Mjk1MjA4Nw==&mid=400452659&idx=1&sn=841b49b875ec3b307f261ed52a7d9c4e&scene=23&srcid=1119JWRt0adNwGxTHiyok460#rd
安装:
1.复制apk安装包到data/app目录下,解压并扫描安装包 2.把dex文件保存到dalvik-cache目录 3.并在data/data目录下创建对应的应用数据目录
卸载:
删除安装过程中上述三个目录下的文件及相关目录
内存方面:
Parcelable 类性能比较高,但是不适合持久化数据到磁盘上
其他方面:
1.Serializable 在序列化的时候会产生大量临时变量,易触发GC 2.Parcelable 不能使用在 数据持久化到磁盘上的情况。有这方面需求的建议使用Serializable类
资料地址: http://www.jianshu.com/p/3acf5b12fff8
对原文中的某一些知识点做了些补充,整体上是按照资料中的逻辑去分析和归整的,谢谢大家!!!
