笔记1

第一天

   //Android6.0权限依赖库的配置
    compile 'com.lovedise:permissiongen:0.0.6'
作业:https://docs.qq.com/sheet/B0gjSU2ioKgD4MNrqk2oUSHY2nc3oP3TvygN2 
今天下午的任务:
简短幽默的自我介绍1~2分钟
2015-12 studio开始使用
工具小技巧:
永远使用比最新版本低一个版本的工具
好处:1.稳定,2.如果出错容易好找,3.不会过时
studio官网:
studio中国中文社区:http://www.android-studio.org/index.php/team
studio官网:https://developer.android.google.cn/studio/index.html
studio的找错:
咱们的studio他有一个缓存的功能,有时你项目中有BUG,然后你把BUG修复,
但是再运行,studio还给你报这个错,这就是因为他们没有重新编译项目,运行的依然是以前出错代码,咱们解决
你就删除缓存,然后在运行,他重新编译项目,然后问他就迎刃而解
studio调试接口,用Postman


第二天
墨刀:主要用来设计产品
后端开发使用工具(编程语言):java,php,go等语言,基本用java和php,而go可以实现区块链
ios使用oc、c、c++、Swift
移动端开发项目的流程:
项目初期,核心人物就是美工瞄,和产品狗他们
项目中期:后端工程师,移动工程师他们携手并肩
项目的后期:由测试人员开始发力
bug管理平台中,若你的bug较多的话会影响效绩
公司的部门
产品部:定制项目需求,原型图(产品经理完成)
开发部:根据需求和原型图进行项目的开发
测试部:对开发出来的产品进行测试
市场部:对应产品进行推广和销售
开发的两种方式:
敏捷式:边出原型图,边开发,产品经理出部分原型图 
UI,开发(Android,IOS,WEB)产品,一起讨论,UI出部分效果图,
开发开发主要模块(测试编写部分测试用例),测试进行测试,如果测试出BUG,让开发改完后,在进行一次回归测试
压力大
瀑布式开发:
UI,开发(Android,IOS,WEB)产品,一起讨论,如果产品原型图合理,就开始做效果如,如果不合理,打回去让产品重新做
UI做完全部原型图
开发开发完全部产品,
测试对产品进行全部测试
优点:产品经理有足够时间去设计产品,产品做的比较完美,开发也有足够时间开发产品,测试也有足够时间去测试,所以这样BUG,质量好
缺点:周期长,企业受不了
CTO:CEO,O2O(线上线下电子商务)
P2P(点对点,个人对个人贷款),SNS(微博,人人,),IM软件(即时通讯软件,微信,米聊,陌陌,遇见)
bug管理平台:禅道,JIRA,红蚂蚁,Bloodhound (寻血猎犬) ,BUG分等级的
公司分为两种:有自己产品的公司,外包
版本控制工具:
编译工具,百度云盘,有道云笔记
版本控制工具:火狐、谷歌、思维导图、Postman
常见版本控制工具:git、svn
作用:管理代码的工具,可以具体的显示什么时间,什么人提交的代码
如果有人更改或者需要后退代码就可以一目了然
svn是集中式版本控制工具,git是分布式
svn是代码提交到一个服务器上,如果你的服务器完蛋了,那么有可能所有代码都不见了
git是代码不在一个机器上面,在所有的使用git的机器上面
git会把管理代码存两份,一份在GitHub,一份在我本身的电脑,如果代码不见了可以在本地找一找
git安装安装两次,一个是Git原生文件,一个是Git帮助使用的客户端
无论是用GIT还是SVN:你做的操作都是一样的,下载代码,创建分支,合并分支,上传代码

github:世界最大的开源网站,帮助开发的资源库,分享自己代码,管理自己项目的网站
缺点:使用github代码就会变成开源,若想变成私有需要付钱,公司一般不用
goding:中文的,只有中国人用,他的私有是免费的,所以企业会优先使用。
作业:
默写GIT命令
GIT常用命令:
git init 【初始化一个git项目】
git status 【查看当前项目状态】
git add . 【提交变动到缓存区】
git commit -m "我是注释" 【提交代码】
git push -u origin master 【提交代码到远程服务器】
git checkout 要切换的分支名称 【切换分支】
git checkout -b 你的feature名称 【切一个新的feature出来】
git branch 【查看我本地所有feature】
git branch -d 你的feature名称 【删除本地的feature】
git merge --no-ff 你的feature名称 【合并版本】
git pull 【拉取远程仓库所有的分支】


第三天
开发一般不在主分支开发,会先切一个分支,这样就算分支代码出错也不会影响主分支代码
如果没问题,就可以合并到主分支没有问题后就会删除子分支
身价表:
https://docs.qq.com/sheet/B0gjSU2ioKgD4pNtgQ2rkIit1AUoVv0wFEKz1 
自定义控件:Android工程师要想月薪过万,必须要掌握的一种能力
这是比混合开发更有优势
可以完成产品经理独特的设计需求
都要有一个自己项目中的自定义控件去打底
三大类:
自绘式自定义控件:
一般情况下时最难的控件,涉及到葛总算法
直接继承View对象
继承式自定义控件:(Button,Text等)
他对Android原生控件进行扩展,相对来说比较简单,但是有可能想不到如何使用
直接继承原生的控件
组合式自定义控件:
相当于把一堆控件封装到一个控件,可难可易,视情况而定。
继承ViewGroup的子类,ViewGroup的子类:5大布局
一般继承Framlayout和线性布局
基础自定义控件:

高级自定义控件:实训之后讲
事件分发:为true时控件才会处理事件,而为false的时候不会处理,而会把事件传给上一级。默认为false
OnTouchListener一共有三种事件:
1.MotionEvent event代表用户的触摸事件:按下,松开,滑动
以勾股定理来得到坐标系
a的平方+b的平方+c的平方
可以得到用户在触摸时按下的坐标,松开的坐标,移动的距离
ACTION_DOWN:按下时回调
得到按下时坐标
int startX = (int)event.getX();
int startY = (int)event.getY();
ACTION_MOVE:移动时回调,会不停回调
y轴需要用float类型
ACTION_UP:松开时回调

第四天
自定义开关按钮(Android有但是太丑)
自定义控件是为了满足产品经理特殊的需求
用int
onMeasure:测试宽高,控件显示时自动调用改方法使用频率中等
onLayout:分配控件在父控件的位置,一般不用
left,top,right,bottom是父控件传入的参数,表明了组件位置,侧面显示了宽高
onDraw:在组件绘制中,决不能在onDraw方法里初始化,因为onDrawer会被反复调用
如果在这里创建对象,会创建许多无用的对象,消耗系统资源
1.学会如何定义自绘式控件,继承View                                                                  
2.覆写其构造方法,固定模式
3.onMeasure,onLayout,onDraw使用条件
4.关键的方法,setMeasuredDimension/抗锯齿setAntiAlias(true);
第五天
第二周
第一天
自绘式控件:继承View,从一个普通的类变成一个控件
覆写他必须要覆写的三个方法
在onMeasure和onDrawer方法中写对应的业务逻辑
绘制圆球
时时回掉onDrawer方法
postInvalidate();
如何使光标只有在点击圆球的时候在移动,不点击是不做操作
第二天
组合式自定义控件:没有自定义控件中有算法,都是一些普通逻辑
特点:继承viewgroup(五大布局都可以继承)
inflate方法非常重要
接口回掉

为什么我们要写组合式自定义:
组合式自定义控件,包含了我们java的一种思想:封装
如果太多的话不方便,而组合式自定义控件就可以直接调用,非常方便
好的程序员,第一次敲一个东西,都是写的特别的详细,以方便第二次使用的时候简洁快速,
菜鸟人物,第一次敲一个东西,就想着快速完成万事大吉,然后第二次再用这个东西,
还要重新开始去敲,完全没有封装等等操作,不考虑以后


扩展式(继承式)自定义控件:继承(extends)scollorview,textview,imageview等
继承的范围是三种自定义控件中最广的
作业:
/**
 * 1.自绘式:最难的,你认真研究算法,逻辑    extends View
 * 2.组合式:封装                        extends  ViewGroup(LL RL ,FL)
 *
 * 3.继承式自定义控件:                  extends  Scollor,listView,RecycleView   TextView  ,ImageVIew
 * 分享需求:
 * 1.根据我手指往下滑动距离,然后这个标题逐渐的变清晰,所以我可以判断出,这个变清晰的过程,和一个值,Y轴
 * 2.这个渐变的过程和我们头部的ImageView高度有着直接关系,当我们ImageView滑动的距离超过这个高度以后,我们的渐变就结束了,变的非常清晰
 * 滑动距离Y轴坐标为0是,我们标题就完成隐藏
 * 想想怎么完成这个东西思路
 *
 * 咱们的这个原生的控件,是不是要具备滑动能力 ,Y轴和滑动息息相关,XlistView,实际也是继承式自定义控件,ListView的基础,又去做的功能扩展
 * 作业:
 * 1.我在这个抽象方法里定义的一参数,你看可以删掉,是哪个参数?
 * 2.使用我定义的自定义控件完成整体的效果,小坑:ImageView高度,我怎么获取
 */
/**
 * date:2018/5/16
 * author:易宸锋(dell)
 * function:
 * 0.扩展式的自定义控件,基于具备滑动效果的ScrollView的基础添加的新功能
 * 1.创建普通类,继承原生的控件,实现三个覆写的方法
 * 2.自定义一个ScrollView滑动监听
 * 3.覆写ScrollView自带的一个滑动监听
 * 4.提供方法,让外界可以设置ScrollView滑动监听对象
 * 5.使用自定义控件监听就可以
 *
 * 咱们搞定ScrollView滑动监听,记住原生的滑动监听没有暴漏出来
 */
 SQLite,Android原生方法,GreenDao
控件显示隐藏有三种:Gone,Visible,inVisible
一个是隐藏,一个是显示,一个是保留隐藏
第三天
提升自己能力的资源:
微信安卓技术公众号:
有时这些公众号会举办线下活动,好处3点


1.送纪念徽章,点心,抽大奖等等.


2.但最重要的是,会请一些大神来讲课,说的都是最新技术或者有深度,有创意的技术点解决办法.


3.同时现场会拍照,相聚志同道合之士.(北京的IT圈就那么大,混啊混的,在圈子里的名声慢慢就出来了,
所以易老师我原则是只要在北京,任何沙龙只要有邀请,或者没有邀请我,只邀请了我朋友,我都跑过去凑凑热闹,
可能你们去参加技术交流什么都听不懂,但你只要在那坐,相信易老师,一切就会物有所值,而且大部分的活动都是免费的.


app架构师              $$$
安卓巴士
安卓开发
android开发探索 
android安全技术大本营
android开发艺术探索    $$$
android开发技术前线
android开发666
android开发中文站
TalkingData
android技术分享
鸿洋                  $$$
郭霖                  $$$
android开发者
AndroidDeveloper      
qq音乐技术团队        $$$
HenCoder              $$$


掘金(并不是技术方面的资讯APP,投资)
如何进一步提高自身能力:沙龙,优质的资源,GitHub很好的开源组织或个人
ANR:主线程里不能做耗时操作,子线程不能做UI更新
中级工程师了解黄金法则
高级工程师:主线程在一定条件下,是可以做耗时操作,系统
原生不用代码架构的项目--->用一个代码架构MVC----->MVP----->MVVM
https://mp.weixin.qq.com/s?__biz=MzI1MTA3Mzk4Mg==&mid=2651020075&idx=1&sn=190fff8f9ea60deef41492227b6376c9&chksm=f20f7ffac578f6ec4b24a3ad82a57cc7626e9951243fbbb2d8e9101b637ff152731240014437&mpshare=1&scene=23&srcid=0613RFGqYtSiAw1sUo75XKSv#rd
https://www.tianmaying.com/tutorial/AndroidMVC
MVC,MVP,MVVM 说成设计模式(    java23种设计模式          ),其实是代码架构
专业名词:
高内聚,低耦合,内存泄漏,内存溢出,内存抖动,
提高用户体验度,流量变现等等
Android项目:网络库,图片加载库
okhttp的二次封装


高内聚,低耦合」,这六个字听起来有点难以理解,其实通俗来讲就是单一职责的功能封装成模块,在模块内部高度聚合,模块与模块之间不会互相依赖,即低耦合。比如我们常用的网络库、图片加载库,这都是属于两个模块,在每个模块内部功能单一,代码高度内聚,但是网络库与图片加载库又不互相依赖,都可以独立工作,互不干扰,这就是所谓的低耦合。




而我们追求「高内聚,低耦合」的目的很简单,我们想让开发人员只专注于一点,提高开发效率的同时,也对代码的健壮性与扩展性有很大好处。试想,如果你做的功能需要同时跟四个部门进行合作,依赖于他们的模块,那么你的开发效率肯定奇低,而且依赖过高,其他部门的代码稍一改动很可能就会对你产生影响,而且问题还不容易定位,这将是一个定时炸弹。
qq即时通讯的项目:MVP也用到MVC,对于逻辑并不复杂的项目,我就用MVC,对于逻辑代码很多我就用MVP
 Model 即模型,也就是数据模型,通常就是所谓的 JavaBean 实体类
有人认为 Model 层包括对数据库的操作、对网络等的操作等
MVC的缺点:视图层和逻辑层依然拆分的不彻底,耦合性还是高,不利于维护,阅读,迭代
 * 没有使用任何的代码模式,MainActivity中处理所有的代码,代码的阅读性,可维护性比较差.
 * 我要求你们用MVC的代码架构,去对这个项目进行修改,MVC这里关于VIew,co咱们不用做任何修改,该的Mode层
 * //哪些代码是处理数据,哪些代码是展示数据,哪些代码是获取的数据
 
工作中使用MVC,有些强制性的必须用MVP
独立开发,到底是用MVP还是MVC,是你自己选
不同的人MVP的风格,精髓是一样,每个项目对象哪些是View,哪些代码是逻辑有着不同见解
MVP开发思想
1.分层
2.编写接口与实现
3.使用p把m与v连接.
4.将P与事件进行绑定
重要的是接口两个字
第四天
所有第三方的东西都是可以做出来的,做东西的时候用第三方是最简单实惠的方法
第三周
第二天
okhttp:
框架发展史
谷歌公司提供的HttpIRLConnection无法满足我们的开发需求,早期工程师都会对httpUrl封装
谷歌把阿帕奇组织开源的一个框架集成到Android SDK,HttpClient提供给大家使用,这个东西不用进行任何依赖操作
Xutils是一个综合性框架,网络请求,数据库等,不过这个框架耦合度过高,Xutils3.0
Volley(没办法下载大文件,快,谷歌推荐使用),okhttp慢慢同意天下,nohttp是中国人开发的,难度低不过性能有问题
OKhttp,retrofit(对OKhttp又进行升级取名retrofit)统一网络框架
Android API123 他把Apache HttpClient从SDK移除了,从而使用API 16
问题:
你的机型适配,在Android API 23 以后需要什么特殊操作
Android6.0系统以后,你的APP需要做什么系统适配(Android6.0动态的权限适配)
框架做的操作:降低我们的开发难度,提升我们的开发效率,让我们站在巨人的肩膀上实现自己的梦想
ImageLoader也是框架,两行代码就可以实现我敲了一天的代码
java 面向对象:万物皆对象

技术选型:为什么用okhttp:
1.出身名门,square开发出来的,square公司出品必出精品
2.减少对服务器的请求次数,减少请求延迟,减少数据流量消耗,
  缓存响应数据来减少重复的请求网络,自动处理Gzip的压缩
  实现的功能:
  1.GET,POST请求,文件的上传下载,加载图片(内部会根据ImageView大小自动对图片进行适合压缩,不适合一次性大量的加载图片,使用的少)
  2.支持请求回调,直接返回对象,对象集合,支持session的保持,还可以支持HTTPS的网络请求
  Okhttp网址:https://github.com/square/okhttp
  使用的是23种设计模式中创建者的设计模式
  现在比较有名的是okgo,网址:https://github.com/jeasonlzy/okhttp-OkGo
实现okhttp的基本使用,Get请求数据
1.搭建环境(使用okhttp添加依赖和权限)
2.完成xml布局,初始化控件
3.根据点击时间进行okhttp,同步异步的请求,从本地缓存请求
okhttp依赖: compile 'com.squareup.okhttp3:okhttp:3.4.2'
安卓常用依赖:https://blog.csdn.net/qq_19681347/article/details/80027208
okhttp图片的上传与下载
图片的下载可以用get
图片的上传就要用post
什么时候用post,什么时候用get
GET和POST
GET:
在URL后面组拼数据,把数据传给服务器
优点:使用方便,效率高
缺点:数据在url的后面组拼,不安全,
  数据受长度的限制,上传数据有限
POST:
把数据变为流,通过流的方式写给服务器
优点:安全,数据长度不受限制
缺点:麻烦,必须指定提交数据长度,数据的类型,必须开启给服务器读写功能
私人的用post,共有的用get,视频用post,因为视频哪怕是几秒的也是比较大的
200:请求成功
400左右的是客户端问题
500左右是服务端问题


&&和||是短路运算符,&和|是非短路运算符
&&与&
区别:两者都表示“与”运算,但是&&运算符第一个表达式不成立的话,
后面的表达式不运算,直接返回。而&对所有表达式都得判断。


|| 与|


区别:两者都表示“或”运算,但是||运算符第一个表达式成立的话,
后面的表达式不运算,直接返回。而|对所有表达式都得判断。


第三天
在我们之后的开发,ListView逐渐被淘汰,新的控件RecycleView取代
listview复用控件对象,
减少对内存资源消耗,提高程序的性能
OOM,内存溢出的问题,说明该控件封装的不完美
不过随着版泵更新升级,Android也越发完美
listview,如果我们不自觉优化,就会出现oom的问题,这说明该控件封装的不完美
Android5.0,谷歌工程师,痛并思痛,退出RecycleView全面替代ListView
RecycleView:
RecycleVIew(Android 21以后出现的新特性,多了很多新控件,最重要的就是Recycleview替代了ListView,采用mvc模式)
但多了个布局管理器,且设置不同的布局管理,RecycleView会不起效果
优点:提供了一种插拔式的体验,高度解耦,异常的灵活,设置各种酷炫效果
提示:Android 5.0 以后才出的,所以API 14里,你想用就需要添加依赖,
兼容包(v4,v7):使低版本的API使用最新的特性


部分用户的手机还有5.0以下的,所以,我们开发还是依赖兼容包。
谷歌发布了一个政策,强制更新,倒逼各个手机厂家升级手机系统为Android P,否则罚大额罚金
RecycleView使用流程
1.把RecycleView添加到布局文件(注意:低版本Android系统,要进行兼容包的关联,API在21以上就不用)
2.初始化控件
3.创建Adapter对象(一般往Adapter传入两个参数:上下文,数据集合),设置adapter
4.创建RecycleView的Bean类
5.设置布局管理器
6.设置点击事件
提示:RecycleView不像ListVIew一样有点击事件,必须要手动通过接口去设置点击,才起效果。
缓存和点击有什么不同
适配器中继承的不再是BaseAdapter了,而是RecycleView


第四天
动画:补间动画,帧动画
属性动画是Android3.0出的
步骤:
1.完成布局资源,初始化控件
2.在xml里定义属性动画,看看属性动画的特征
在res文件夹下创建animator的文件
在这个文件下创建xml文件,注意:根节点是objectAnimator
AnimatorInflater把xml文件变成一个控件对象
把要做动画的控件设置给动画对象,然后执行动画
3.在java代码里定义动画
创建属性动画对象,指定动画类型,参数
制定动画时长
制定动画播放形式
制定动画再次播放次数,开启动画
极光推送
是通知栏的一种
作用:为了让服务端能够及时通知客户端,主动发消息给客户端,提升用户忠诚度,提高留存率与收入
现在的一些比较常见的推送:Jpush,个推,云巴,百度推送,友盟推送,米推
JPush,个推,米推,友盟推送,Jpush
第五天
百度地图
目标:1,。了解百度地图SDK应用场景:滴滴打车,美团团购-电影,58同城-租房等
集成百度地图的key
1.申请账号
2.拷贝jar资源
3.配置Build.gradel
4.配置清单文件
5.创建Application类,然后进行百度地图的初始化
6.xml布局文件应用百度地图控件
7.展示
百度bug:
百度SDK3.7版本:百度地图提供的地图模块里有关放大缩小的Button按钮,适配没有做.
百度SDK共性问题:在定位上,第一个参数是维度,第二参数是经度.
(而我们平常是经度在前,维度在后,称经纬度.百度这个定义虽然没有什么大问题,
但是和我们的习惯不符合)
怎么取消掉百度地图默认所带的LOGO
补充:隐藏百度地图左下角的LOGO 
- 百度地图的LOGO图片放在baidumapapi_map_vxxx.jar下的assert目录底下
- 将此jar包放到本地,解压打开,使用2张透明的图片替换LOGO图片即可
- 将替换好的jar包放到工程的libs文件夹下面


注意:
在一些机型会出现显示不出来地图控件,比如在oppo手机上就什么都没有
百度地图不能运行到genymotion虚拟机上面,会报异常,只能运行到小米乐视真机上.


百度地图出现空白或者都是格子状的问题:
 * 1.模拟器没网络,没有开网络权限
 * 2.包名或者sha1值出错
 * 3.没有初始
 
我说的是你研究任何第三方SDK的方法,语音,即时通讯,直播,支付
1.看人家提供的官方demo,改好以后导入到自己项目中,然后运行看效果
2.看官网集成的说明文档
3.从百度地图下载的类参考
冰箱的说明书是一样


周六
知识的理解:
只是本身并不是最宝贵的财富,而是在学习只是过程中锻炼出来的能力
从儒家文化变成咱们现在学习的近代科学知识
 * 属性动画与补间动画的区别?
 * 
 * DEMO,你用补间动画,你做一个平移,然后设置点击事件,那么当动画从最左边,移动最右边,然后你点击这个控件,是否弹吐司
 * 你用属性动画,你做一个平移,然后设置点击事件,那么当动画从最左边,移动最右边,然后你点击这个控件,是否弹吐司
 * 
 * 补间动画,没有吐司     属性动画,弹出吐司     然后你会思考   ?  为什么是这个效果   
 * 源码:属性在方法内部执行,真实的改变了控件属性     补间动画,没有改变控件属性,他仅仅是做了动画,什么都没有,  所以属性和补间的动画的区别?控件属性是否真实的改变
 * 博客看看别人的理论找到原因,  最终得到结果  
 * 
 * 需求:老板让我做一个开宝箱的效果,宝箱从手机最底部缓缓升到中级 ,然后用户点击中间的宝箱  ,就可以打开宝箱  ,问题来:用什么动画  属性动画
 第四周
 第一天
 支付宝,加密方式是RSA,数据传递用GET请求,微信用的是MD5,数据使用POST
 RSA相对来说是最安全的,如果想要破解的话成本太高,基本没有几十年是破解不出来的
 加密方法:MD5
 对称加密DES或者AES进行 ,加密解密都是一个 非对称加密RSA 两个密钥,加密一个,解密一个
公钥,私钥
第二天
okhttp二次封装
两种实现方式,自定义拦截器:如果服务器没有给文件在响应头里缓存标签,
那么我们在拦截器中给响应头加上标签
okhttp缺点:代码过于冗余,需要来回切换线程,运行线程间通信不爽
做一个项目,需要上百各类,每次请求网络,都创建一个okhttpclint,很浪费资源,会创建上百个
我们就通过封装,单例模式,保证这个对象整个项目中只有一个,优化我们的内存
接口固定模式:单例
对okhttp封装工具类,实现两个功能,从服务器下载数据,从客户端上传数据,文件上传,下载工具类
优点:节约内存,整个项目所有的ok公用一个对象,减少handler的创建
简化了okhttp请求网络冗余的步骤
解决okhttp网络请求成功,数据在子线程,我们要传到主线程更新UI,使逻辑更简单
保证对象只有一个


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值