Dagger2
-一个更为精简的定义:当类型不足以鉴别一个依赖的时候,我们就可以使用这个注解标示;
@Scope:@Scope同样用于自定义注解,我能可以通过@Scope自定义的注解来限定注解作用域,实现局部的单例;
@Singleton:@Singleton其实就是一个通过@Scope定义的注解,我们一般通过它来实现全局单例。但实际上它并不能提前全局单例,是否能提供全局单例还要取决于对应的Component是否为一个全局对象。
我们提到@Inject和@Module都可以提供依赖,那如果我们即在构造函数上通过标记@Inject提供依赖,有通过@Module提供依赖Dagger2会如何选择呢?具体规则如下:
步骤1:首先查找@Module标注的类中是否存在提供依赖的方法。
步骤2:若存在提供依赖的方法,查看该方法是否存在参数。
a:若存在参数,则按从步骤1开始依次初始化每个参数;
b:若不存在,则直接初始化该类实例,完成一次依赖注入。
步骤3:若不存在提供依赖的方法,则查找@Inject标注的构造函数,看构造函数是否存在参数。
a:若存在参数,则从步骤1开始依次初始化每一个参数
...
ProGuard
参考
《App 研发录》包建强
Android 数据存储
外部存储有两种情况:包名路径、自定义路径。包名文件夹在应用卸载时候会一同卸载,而不是以外部存储还是内部存储区分。坑1:如果没有在配置清单文件声明读或写外部文件的权限,默认在外部存储是不会有PackageName文件名目录的,值得注意的是,如果在这一方面出现问题,日志(Logcat)不会告诉你是权限没有声明,而是空指针异常或者其它的异常。