一路走来

2014.07.10-12

坐绿皮火车卧铺,学校同班几个伙伴,说说笑笑,经历两天的时间,抵达了梦寐已久的之都,深圳。【因为两年前的我,曾经说一句话,我毕业后第一站就是深圳。】

2014.07.15-25

那时的我们还带着学校的稚气,未毕业就踏入社会之门,我们以为社会应该跟学校差不多,其实错了,一开始我们以毕业生的姿态,拿着不是很起眼的学历,奔波于地铁、公交, 不断的求职,在一次一次挫折后,我们开始披上社会的面具,伪造假学历,毕业证书,说着不太切实际的话,职位才向我们敞开大门。这是我的第一份工作太突然,做了两个星期就离开,那时的我没自信,恐惧,加上没钱了跟爸妈提拿钱时,倒出了自己的离职,也被说一顿。

2014.07.15-2015.06.31

从上家公司离职后,突然大病一场,带着病找了一周时间,没找到面试的工作机会,那时真的很失望。这时同班的同学介绍我去她公司面试,我带自己的简历与在学校做的作品,终于敲开了入职之门。这是我的入职二家公司呆了一年。这里年的时间里,我学到很多很多东西,也是最深刻的一年,经历太多,种种原因,坚持到了合同结束,没有想过续签合同的就走了。

2015.07.04-2016.06.31

第三家公司,面试了几天两个off,第一个off,是早上去同学公司面试。第二个off下午自己找到的公司,这家也是我一年多以来最自信,最爽快的面试经历。在一天的考虑之中。最终还是去了同学的公司。然而没呆到合同结束就走人了。非常感谢自己的上司热情款待,部门老大的教育,带我们疯,带我们闹。

2016.7.-至今

第四家公司,突然来到这家公司是跳槽过来的,上家公司环境,待遇算可以,但是公司的产品迭代太慢,闲就是一个月以上,考虑一个星期多。最后还是选择跳槽来到了这家公司就为了两点,未接触过的技术点。待遇提升。

dagger2mvp架构使用

了解请点击dagger2基础了解

dagger2使用教程:
根目录的build文件加入android-apt支持

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
环境配置:
buildscript{
repositories{
jcenter()
}
}
dependencies{
classpath 'com.android.tools.build:gradle:x.x.x'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}

在app目录的build文件加入 apt plugin的支持

plugin : 'com.neenbeankt.android-apt'

加入dagger2 retrofit okhttp依赖

compile 'com.google.dagger:dagger:2.0'
apt 'com.google.dagger:dagger-compiler:2.0'
provided 'org.glassfish:javax.annotation:10.0-b28'

在Application中实践Dagger2
现在依赖已经加入,开始动手使用Dagger2,第一步考虑我们Application。
先创建AppApplication,并在AndroidMainfest.xml 注册好。


public class AppApplication extends Application{
public void onCreate(){
super.onCreate();
}
}

<application
android:name=".AppApplication"
android:allowBackuo="true"
android:icon="@mipmap/ic_lacuncher"
android:label="@string/app_name"
android:label="@string/app_name"
/>

android断点调试

Android Studio包含一个debugger程序,可以帮助你在模拟器和真机上调试你的android应用.通过Android Studio的debugger,你可以:

1.选择你想调试的设备.
2.在代码上设置断点.
3.在运行时去检查变量和表达式的值.
可能平时大家调试代码都是通过打印log的形式,今天带大家走进断点调试的世界.

断点调试-基础篇
设置断点
设置断点的方法: 左键在需要调试的代码所处的侧边栏处单击.如下图所示:

Alt text
开始调试
点击红色箭头指向的按钮,即可进行代码调试,如下图所示:
Alt text
调试界面如下所示:
Alt text
单步调试
Step Over(F6)
代表程序直接执行当前行代码.(ps:如果该行是函数调用,则直接执行完函数的全部代码)
Alt text
Step Into(F5)
代表程序执行当前行代码(ps:如果该行有自定义方法,则运行进入自定义方法,不会进入官方类库的方法)
Alt text
具体效果如下:
Alt text
Step Out(F7)
跳出Step Into进入的方法.例如我们感觉进入的方法没有问题,不需要执行后续代码,就可以通过Step Out跳出当前进入的代码.
Alt text

dagger2学习

为什么使用依赖注入

使用依赖注入的可以带来以下好处:

  1. 依赖的注入和配置独立于组件之处。
  2. 因为对象是在一个独立、不耦合的地方初始化,所以当注入抽象方法的时候,我们只需要修改对象的实现方式,而不是用大改代码库。
  3. 以来可以注入到一个组件中:我们可以注入这些依赖的模拟实现,这样使得测试更加简单。
    此处输入图片的描述

基本特点

  1. 多个注入点:依赖,通过injected
  2. 多种绑定方法:以来,通过provided
  3. 多个modules:实现某种功能的绑定集合
  4. 多个对象图:实现一个范围的modules集合

区别点

  1. 再也没有使用反射:图的验证、配置和预先设置都在编译的时候执行。
  2. 容易调试和可跟踪:完全具体地调用提供和创建的堆栈。
  3. 更过的性能:谷歌声称他们提高了13%的处理性能
  4. 代码混淆:使用派遣方法,就如同自己写的代码一样
    当然素偶有这些很棒的特点都需要付出一个代价,那就是缺乏灵活性,例如:dagger2没用反射所有没有动态机制。

概念与注入

  1. @Inject:通常在需要依赖的地方使用这个注解.换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。这样,Dagger就会构造一个这个类的实例并满足他们的依赖。
  2. @Module:Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样dagger在构造类的实例的时候,就知道从哪里去找到需要的依赖。modules的一个重要的特征它们设计分区并组合在一起(比如说,在我们的app中可以有多个组成在一起的modules)。
  3. @Provide:再modules中,我们定义的方法是用这哥注解,以此告诉dagger我们想要构造对象并提供这些依赖。
  4. @Component:Components从根本上说就是一个注入器,也可以说是@Inject和@Modules的桥梁,它的主要作用就是连接这两个部分。Components可以提供所有定义了的类型的实例,比如:我们必须用@Componets注解一个借口然后列出所有的@Modules组成该组件,如果缺失了任何一块都在编译的时候报错。所有的组件都可以通过它的modules知道依赖的范围。
  5. @Scope:Scope可是非常的有用,dagger2可以通过自定义注解限定注解的作用域。
  6. @Qualifier:当类的类型不足以鉴别一个依赖的时候,我们就可以使用这个注解表示。

使用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

app->build.gradle

apply plugin: 'com.neenbedankt.android-apt'

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}

android {
...
}

dependencies {
apt 'com.google.dagger:dagger-compiler:2.0'
compile 'com.google.dagger:dagger:2.0'

...
}

如上所示,我们添加了编译和运行库,还有必不可少的apt插件,没有这插件,dagger可能不会正常工作,特别是在Android studio中。

dagger2注解的使用方式

  1. 构造方法注入:在类的构造方法前面注入@Inject
  2. 成员变量注入:在类的成员变量(非私有)前面注解@Inject
  3. 函数方法注入:在函数前面注解@Inject

android基于HLS和TRMP协议的第三方SDK选择

协议的详解网上资料都太多了,我就不赘述了。Android上3.0开始支持hls,但在4.0以后就支持的不太好了。而对rtmp来说,Android是默认不支持的。网上有一些第三方库支持这两种协议,下面就我找到的第三方库列出并做出比较。