![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
实训
zhang___yong
安卓菜鸟,大学生一枚
展开
-
项目实训(一) 网络图片下载进度监听
我们的项目是一个图片分享社区,所以要对图片处理的一些逻辑进行学习。学习自郭霖大神glide系列博客,自己经过思考重新整理。一。全局替换加载策略首先要知道Glide在实例化时的工作(也就是框架的初始化):设计模式是builder模式,可以分为两部分,首先builder调用Glide构造器传入所需模块(内存策略,图片解码模式等),然后Glide构造器中对各种类型的图片需求加载进行注册(如File,in...原创 2018-07-08 11:17:45 · 254 阅读 · 0 评论 -
项目实训(二十五)网络基础整理
1.http是应用层协议,将数据看做一个个数据包。请求报文包括请求行(url,method,协议及版本),请求头:Accept:客户端接受的数据类型,含有一个或多个MIME类型 Cookie: http中每个请求都是独立的,所以有必要有一个字段记录一些内容。 Cache-control : 缓存控制策略。有以下几个配置项private...原创 2018-08-27 12:19:13 · 278 阅读 · 0 评论 -
项目实训(十八)借助aspectj实现AOP编程初探
1.首先要知道一点自定义注解:用来标识注解的注解称为元注解,一共四种:Target指定注解的对象(类,方法,属性),Retention指定注解的生命周期(SOURCE,CLASS,RUNTIME)依次递增,RUNTIME表示保留到运行时。Inherited表示可以被子类继承,Documented表示注解信息添加到java文件中。更新一下Rentention的理解:SOURCE在编译成cla...原创 2018-08-23 10:57:16 · 189 阅读 · 0 评论 -
项目实训(十九)proguard学习
proguard是一个工具,常用于代码混淆,但是其作用不止是混淆,而是压缩(删除未使用的类方法字段)、优化(对字节码进行优化)、混淆(名称无意义化)、预检(确保字节码能够可执行)。在android studio中对proguard的使用主要在于两个文件:module的gradle文件以及proguard-rules.pro文件。首先来看module级的gradle中的相关代码:bui...原创 2018-08-23 20:25:30 · 283 阅读 · 0 评论 -
项目实训(二十)Camera探究
安卓中可以操作相机的类有hardware.Camera和Camera2,后者只适用于6.0+的部分机型,所以这里只探究API1的Camera。项目里发现使用了SurfaceTexture,SurfaceTexture不同于SurfaceView和GLSurfaceView的地方在于它接受输入数据但是不在屏幕上绘制出来,因此可以作为数据源和view之间的一层,处理传来的数据然后交给view绘制。...原创 2018-08-24 17:15:19 · 312 阅读 · 0 评论 -
项目实训(二十一)intent借助parcelable接口传递对象数组
安卓里的序列化接口有两个,Serializable和Parcelable。前者使用非常简单,只需要实现该接口,后者还需要实现几个接口里的方法等。在通过intent传递一个对象的时候,我通常让该对象类实现Serialazable,然后用bundle.putSerializable就可以了。但是要传递一个对象数组的时候,我发现bundle并没有putSerializableArray或putSer...原创 2018-08-24 17:18:48 · 891 阅读 · 0 评论 -
项目实训(二十二)【巨坑】recyclerview在适配器更新后布局混乱
先描述一下我遇到的问题:一个帖子列表,帖子布局中有一个显示图片的布局,一张两张三张图片的显示效果不同,所以对应着有三个不同的布局,初始都是gone。根据解析数据解析出的图片数选择显示那个布局。列表有底部加载,到达底部获取数据添加到数组中,然后调用适配器的notify...方法之后,神奇的事情发生了。底部加载更多前的帖子,都显示了同一张图片。也就是说,列表项的重新渲染出错了。 刚...原创 2018-08-24 17:22:52 · 465 阅读 · 0 评论 -
项目实训(二十三)对RxJAVA的理解
github地址:https://github.com/ReactiveX/RxJavaRxJAVA是一个响应式的框架,基于观察者模式。主要有两个类,Observable和Subscriber。前者就是被观察者,用来向观察者发送数据流或事件。Subscriber继承自Observer,只是多了一个onStart方法。一个完整的响应式开发流程包括实现被观察者,实现观察者,完成订阅。当然,...原创 2018-08-24 17:26:10 · 165 阅读 · 0 评论 -
项目实训(十四)mac pro charles连接手机(6.0)
手机是小米安卓6.0系统1.charles help--ssl proxying--install charles root 证书 中将Charles证书设置为信任2.charles proxy--ssl proxying settings--enable +add一个host=*,post=443的location这两部配置完charles应该能抓电脑上的包了接下来点击cha...原创 2018-08-22 15:01:46 · 203 阅读 · 0 评论 -
项目实训(十一)导入一个mudule
将一个项目的一个Mudule导入到另一个项目。1.gradle.properties: 这个文件里定义了一些gradle里可以用的量,注意将原项目级文件中的量copy过来,否则Module的gradle可能会找不到2.在settings.gradle里加入module,在app的gradle里依赖该module。2.确认gradle中路径,查看所有对外部文件的路径。3.尽量保持依赖...原创 2018-08-06 17:48:43 · 213 阅读 · 0 评论 -
项目实训(二) 加载圆形图(从源码看自定义图形转换)
Glide提供了多种默认的图形变换,如centerCrop(中心剪裁,同imageview的scaletype)等,可以通过在链式语法中加入transform(BitmapTransmation)来设置图片的变换。centerCrop实际上就是调用transform(new CenterCrop)。那先来看看这个centerCrop,直接继承自BitmapTransmation,核心方法就一个:@...原创 2018-07-08 11:19:11 · 232 阅读 · 0 评论 -
项目实训(六)greenDao存列表以及一对一关系的坑
在更改数据库结构,比如增加表修改字段什么的首先要保证数据库升级,否则会直接崩。在app的gradle里向上修改版本号即可,没有的话加上,greendao { schemaVersion 2}原数据库内容会清空。 1.我在这张表里有一个List<String>和一个自定义object。list是不能直接存的,要借助转换器; @Convert(col...原创 2018-07-25 15:31:51 · 660 阅读 · 0 评论 -
项目实训(三)
1.AppCompatActivity设置全屏:我想在主配置文件里设置应该比在活动代码里设置更加优雅。注意AppCompatActivity只能设置Theme.AppCompat类型的主题,在styles.xml里定义一个主题设置给aty即可,第二个item表示没有遮罩(如启动时看到的白屏): <style name="FullScreenAppCompat" parent=...原创 2018-07-21 14:58:41 · 348 阅读 · 0 评论 -
项目实训(七)effective java 读书笔记
1.单个enum类型成为单例模式的绝佳实现,他支持序列化并绝对防止多次实例化。2.尽量使用基本类型而非装箱基本类型,避免多次创建装箱实例造成的浪费。3.在重写equals的时候要先使用instanceOf进行类型检查,所以不需要进行判空。可以在最开始时先使用开销比较低的==进行判断。不要提供非object类型的重载。4.将类设置为不可变是有必要的,线程安全,不易出错。5.所有基本类...原创 2018-07-26 21:09:54 · 228 阅读 · 0 评论 -
项目实训(四)BuildConfig生成当前git commitId
BuildConfig中的常量实际上都是gradle生成的,而且注明了不可修改,包括是否为DEBUG模式,版本号等一些信息。现在我们想要在里面存一个当前的git commitId以供使用,首先找到app对应的gradle文件(不同module有不同对应的BuildConfig,要注意),在android模块上方定义一个函数:def getGitSha = { -> def ...原创 2018-07-22 10:23:41 · 699 阅读 · 0 评论 -
项目实训(五)Rxjava 2.0 学习笔记
我感觉Rxjava像是一条流水线,一块原料到来经过层层加工最后交给订阅者,当然不处理直接交给订阅者也可以。从基本设计(Rx1.0)来看,Observable有一个内部类实例OnSubscribe,当Observable调用subscribe时会调用这个OnSubscribe的call。这就是全部。一般来说会在call里调用Subscriber的方法将信息传递过去。由此基本逻辑,又延伸封装出各种...原创 2018-07-22 15:11:15 · 170 阅读 · 0 评论 -
项目实训(八)天坑(静态变量值不对+集成SDK第一次启动出错)
1.用了一个静态变量来存数据库获取的数据,在静态代码块里进行更新。然后退出再次启动应用发现并未更新,原来安卓为了优化启动保存了这些信息,就像Application不会再次初始化。 2.在集成一个SDK生成一个值的时候发现第一次安装无论如何无法生成,杀掉进程重启即可生成。原来是因为我在Application的onCtreate里进行了这个操作,而这时候需要的权限还都没有,所以无法生成。解决方...原创 2018-07-31 10:24:11 · 218 阅读 · 0 评论 -
项目实训(十二)天坑,plugin error : cannot load plugin(AS3.1)
早起打开AS,发现test包啥的都找不到了,说是加载插件失败。打开preferences里的插件,发现一大片插件都红了。上网找答案,删除资源库/preferences/AS3.1/disabled_plugin(这个文件记录了不使用的插件列表),然后重启,没用。去除红色插件的勾选再重新勾选,没用,一点反应没有,还是红的,也没有提示restart。 终极操作:替换程序包/Conten...原创 2018-08-09 13:05:30 · 1286 阅读 · 0 评论 -
项目实训(十)引入mudule后System.loadLibrary失败天坑
我使用Android Studio的include C++生成了一个项目,然后Import一个module,这个module也是一个含有C++代码和CmakeLists的项目。然后编译也全部通过了,我调用这个mudule里的native方法的时候System.loadLibrary加载库失败了。百思不得其解,相应的so文件都有,怎么就加载不到呢。最终发现是因为我原项目没有指定ndk的abi,所...原创 2018-08-05 18:32:40 · 725 阅读 · 0 评论 -
项目实训(九)手势相关
官方文档:https://developer.android.google.cn/reference/android/view/MotionEvent.html#ACTION_MASK首先要清楚事件分发机制,在一次事件序列(从按下到抬起)中会产生若干个MotionEvent,首先会调用onTouch(setOnTouchListener)进行处理,如果返回false的话说明没有消耗,交给onT...原创 2018-08-01 15:45:28 · 229 阅读 · 0 评论