-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Issues
1.Dagger 前缀的类为 Dagger2 使用 Apt 自动生成的,如果缺失的话,先把报错的部分注释掉,然后编译下项目,Dagger 前缀的类就自动生成了,这个时候打开注释就可以了, 更多 Dagger 注入的常见问题, 具体用法请参照 Dagger2 的 官方文档.
2. Github 仓库的最新代码会领先于 Jcenter 远程库,具有下一个版本的新特性,所以会发现在 Github 仓库里最新的 Demo 上使用最新的远程库版本,会出现版本不兼容的情况,这时请进入 这里 查看对应的版本并下载下来删除 arms Module 后,将 Demo 依赖对应版本的远程库即可使用,也可以直接使用 git checkout (对应版本号, 如 v2.2.0) 切换到对应版本的 Release 代码.
3. 在 Android 4.4 或以下版本如果突然出现 java.lang.NoClassDefFoundError 错误, 或者 java.lang.ClassNotFoundException 异常, 以及无缘无故提示 Unable to find ConfigModule 异常, 请根据这个 解决方案 处理.
如果在 Android 5.0 或以上版本出现以上问题, 请在接入 com.android.support:multidex:x.y.z 后, 在当前 Module 的 build.gradle 中加入以下代码:
dexOptions {
javaMaxHeapSize "4g"
jumboMode = true
preDexLibraries = false
additionalParameters = [
'--multi-dex',//多分包
'--set-max-idx-number=60000'//每个包内方法数上限
]
}
4. MVPArms 为什么使用 AndroidEventBus 而不是 greenrobot 的 EventBus ,请看这里 我的回答, AndroidEventBus 在 组件化 中也更容定位和管理事件.
5. 第一次启动 app 时,冷启动会白屏很久,这并不是因为本框架导致的,是因为 Instant Run 在 Debug 模式下会在第一次启动时部署一些资源,如果签名打 Release 安装包则不会出现冷启动很慢的情况,所以不用担心影响用户体验.
6. 在启动 app 时报如下错误: Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication
,请将 Instant Run 关闭即可.
7. 当依赖 Espresso 遭遇 Conflict with dependency 'com.google.code.findbugs:jsr305'
错误时,请将以下代码加入到当前 Module 的 build.gradle 中:
dependencies {
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
exclude module: 'jsr305'
}
}
8. Butterknife 找不到控件,报空指针异常,请将以下代码加入到当前 Module 的 build.gradle 中:
dependencies {
annotationProcessor 'com.jakewharton:butterknife-compiler:x.y.z'
}
9. 本框架 master 分支使用的是 Rxjava2, rx1 分支使用的是 Rxjava1, rx1 分支已停止维护, 建议使用 master 分支, 也就是 2.x.x 版本.
10. 对于逻辑简单的页面可以不使用 Presenter,直接在 Activity 或 Fragment 中处理逻辑,不给 Activity 或 Fragment 指定 Presenter 的范型即不使用 Presenter,在 Presenter 中如果不需要处理数据,可以不提供 Model(BasePresenter 有一个只需要 View 的构造方法).
11. Presenter 和 Model 都可以无限制的 复用, 所以 MVP 的划分不需要太细粒度, 稍微粗粒度一点, 即不需要每个 Activity 或 Fragment 都给他划分一套 MVP, 可以几个 Activity 或 Fragment 使用同一个 Presenter(使用同一个类不是同一个对象, 这个 Presenter 含有可以共用的逻辑), 也可一个 Activity 或 Fragment 根据不同的需求持有多个不同类型的 Presenter 对象, Model 层同理, 这样灵活使用, 不仅延续了 MVP 的优点使项目低耦合易维护, 也缓解了 MVP 的缺点使项目减少了很多类和接口,但是怎么划分, 怎么掌握这个粒度, 就需要一定的经验, 这才是 MVP 的精髓.
12. 框架中的 Presenter 怎么注入的? 注入对象的来源?
14. 如何复用 Presenter? (一个 View 对应多个 Presenter)
15. 框架中如何集成 Tinker?
16. RxCache 出现 java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap
异常?
- 1 开发准备
- 1.1 导入框架
- 1.2 引用 config.gradle
- 1.2.1 使用 config.gradle
- 1.3 配置 build.gradle
- 1.3.1 依赖 Dagger2
- 1.3.2 使用 Lambda
- 1.4 配置 AndroidManifest
- 1.4.1 添加权限
- 1.4.2 指定 Application
- 1.4.3 配置 AndroidAutoSize
- 1.4.4 配置框架自定义属性
- 1.5 混淆
- 1.6 版本更新
- 2 快速开始
- 2.1 ConfigModule
- 2.2 AppComponent
- 2.3 RepositoryManager
- 2.4 MVP 实战
- 2.4.1 Contract
- 2.4.2 View
- 2.4.3 Model
- 2.4.4 Presenter
- 2.4.5 MVP Module
- 2.4.6 MVP Component
- 2.4.7 Dagger Scope
- 2.4.8 MVP 总结
- 3 功能使用
- 3.1 App 全局配置信息(使用 Dagger 注入)
- 3.2 全局捕捉 Http 请求和响应
- 3.3 全局错误处理及发生错误时重新执行
- 3.4 ImageLoader 如何扩展以及切换图片请求框架
- 3.5 AndroidEventBus Tag
- 3.6 AutoLayout 组件
- 3.7 自定义 PopupWindow
- 3.8 快速实现 RecyclerView
- 3.9 权限管理(适配 Android 6.0 权限管理)
- 3.10 Gradle 配置启动 Debug 模式
- 3.11 AppManager(管理所有的 Activity)
- 3.12 AppDelegate(代理 Application 的生命周期)
- 3.13 ActivityDelegate 和 FragmentDelegate
- 3.14 框架中 RxLifecycle 的使用
- 4 Arms 扩展库
- 5 更新日志