图书介绍
移动开发 App研发录 架构设计、Crash分析和竞品技术分析PDF|Epub|txt|kindle电子书版本网盘下载
![移动开发 App研发录 架构设计、Crash分析和竞品技术分析](https://www.shukui.net/cover/38/30001475.jpg)
- 包建强著 著
- 出版社: 北京:机械工业出版社
- ISBN:9787111516385
- 出版时间:2015
- 标注页数:304页
- 文件大小:38MB
- 文件页数:331页
- 主题词:移动电话机-应用程序-程序设计
PDF下载
下载说明
移动开发 App研发录 架构设计、Crash分析和竞品技术分析PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一部分 高效App框架设计与重构3
第1章 重构,夜未眠3
1.1 重新规划Android项目结构3
1.2 为Activity定义新的生命周期5
1.3 统一事件编程模型7
1.4 实体化编程9
1.4.1 在网络请求中使用实体9
1.4.2 实体生成器11
1.4.3 在页面跳转中使用实体12
1.5 Adapter模板14
1.6 类型安全转换函数16
1.7 本章小结17
第2章 Android网络底层框架设计19
2.1 网络低层封装19
2.1.1 网络请求的格式19
2.1.2 AsyncTask的使用和缺点21
2.1.3 使用原生的ThreadPoolExecutor+Runnable+Handler24
2.1.4 网络底层的一些优化工作28
2.2 App数据缓存设计32
2.2.1 数据缓存策略32
2.2.2 强制更新35
2.3 MockService36
2.4 用户登录38
2.4.1 登录成功后的各种场景39
2.4.2 自动登录41
2.4.3 Cookie过期的统一处理44
2.4.4 防止黑客刷库45
2.5 HTTP头中的奥妙46
2.5.1 HTTP请求46
2.5.2 时间校准48
2.5.3 开启gzip压缩51
2.6 本章小结52
第3章 Android经典场景设计53
3.1 App图片缓存设计53
3.1.1 ImageLoader设计原理53
3.1.2 ImageLoader的使用54
3.1.3 ImageLoader优化55
3.1.4 图片加载利器Fresco56
3.2 对网络流量进行优化58
3.2.1 通信层面的优化58
3.2.2 图片策略优化59
3.3 城市列表的设计61
3.3.1 城市列表数据61
3.3.2 城市列表数据的增量更新机制63
3.4 App与HTML5的交互64
3.4.1 App操作HTML5页面的方法64
3.4.2 HTML5页面操作App页面的方法65
3.4.3 App和HTML5之间定义跳转协议66
3.4.4 在App中内置HTML5页面67
3.4.5 灵活切换Native和HTML5页面的策略68
3.4.6 页面分发器68
3.5 消灭全局变量70
3.5.1 问题的发现70
3.5.2 把数据作为Intent的参数传递71
3.5.3 把全局变量序列化到本地71
3.5.4 序列化的缺点75
3.5.5 如果Activity也被销毁了呢79
3.5.6 如何看待SharedPreferences80
3.5.7 User是唯一例外的全局变量80
3.6 本章小结81
第4章 Android命名规范和编码规范83
4.1 Android命名规范83
4.2 Android编码规范86
4.3 统一代码格式89
4.4 本章小结90
第二部分 App开发中的高级技巧93
第5章 Crash异常收集与统计93
5.1 异常收集93
5.2 异常收集与统计96
5.2.1 人工统计线上Crash数据96
5.2.2 第一个线上Crash报表:Crash分类97
5.2.3 第二个线上Crash报表:Crash去重99
5.2.4 线上Crash的其他分析工作104
5.3 本章小结105
第6章 Crash异常分析107
6.1 Java语法相关的异常108
6.1.1 空指针108
6.1.2 角标越界109
6.1.3 试图调用一个空对象的方法110
6.1.4 类型转换异常110
6.1.5 数字转换错误111
6.1.6 声明数组时长度为-1111
6.1.7 遍历集合同时删除其中元素112
6.1.8 比较器使用不当114
6.1.9 当除数为0115
6.1.10 不能随便使用的asList116
6.1.11 又有类找不到了(一):ClassNotFoundException116
6.1.12 又有类找不到了(二):NoClassDefFoundError117
6.2 Activity相关的异常117
6.2.1 找不到Activity117
6.2.2 不能实例化Activity118
6.2.3 找不到Service118
6.2.4 不能启动BroadcastReceiver119
6.2.5 startActivityForResult不能回传119
6.2.6 猴急的Fragment120
6.3 序列化相关的异常120
6.3.1 实体对象不支持序列化121
6.3.2 序列化时未指定ClassLoader121
6.3.3 反序列化时发现类找不到:被ProGuard混淆导致的崩溃122
6.3.4 反序列化时发现类找不到:传入畸形数据123
6.3.5 反序列化时出错123
6.4 列表相关的异常123
6.4.1 Adapter数据源变化但是没通知ListView124
6.4.2 ListView滚动时点击刷新按钮后崩溃125
6.4.3 AbsListView的obtainView返回空指针125
6.4.4 Adapter数据源变化但是没调用notifyDataSetChanged126
6.5 窗体相关的异常126
6.5.1 窗口句柄泄露126
6.5.2 Viewnot attachedtowindowmanager128
6.5.3 窗体在不恰当的时候获取了焦点129
6.5.4 token null is notfor an application130
6.5.5 permissiondeniedforthiswindowtype131
6.5.6 isyour activity running131
6.5.7 添加窗体失败133
6.5.8 AlertDialog.resolveDialogTheme134
6.5.9 The specified child alreadyhas aparent136
6.5.10 子线程不能修改UI137
6.5.11 不能在子线程操作AlertDialog和Toast141
6.6 资源相关的异常143
6.6.1 Resources$NotFoundException143
6.6.2 StackOverfiowError144
6.6.3 UnsatisfiedLinkError144
6.6.4 InfiateException之FileNotFoundException145
6.6.5 InfiateException之缺少构造器145
6.6.6 InfiateException之style与android:textStyle的区别146
6.6.7 TransactionTooLargeException147
6.7 系统碎片化相关的异常147
6.7.1 NoSuchMethodError147
6.7.2 RemoteViews148
6.7.3 pointerIndex outofrange149
6.7.4 SecurityException之一:Intent中图片太大150
6.7.5 SecurityException之二:动态加载其他apk的activity151
6.7.6 SecurityException之三:Nopermissiontomodifythread151
6.7.7 view的getDrawingCache()返回null152
6.7.8 DeadObjectException153
6.7.9 Android 2.1不支持SSL153
6.7.10 ViewFlipper引发的血案153
6.7.11 ActivityNotFoundException154
6.7.12 Android 2.2不支持xlargeScreens154
6.7.13 Package managerhas died155
6.7.14 SpannableString与富文本字符串155
6.7.15 Can not perform this action after onSaveInstanceState156
6.7.16 ServiceIntentmustbe explicit157
6.8 SQLite相关的异常157
6.8.1 Notransactionis active158
6.8.2 忘记关闭Cursor158
6.8.3 数据库被锁定159
6.8.4 试图再打开已经关闭的对象159
6.8.5 文件加密了或无数据库159
6.8.6 WebView中SQLLite缓存导致的崩溃160
6.8.7 磁盘读写错误161
6.8.8 android metadata表不存在161
6.8.9 android metadata表中的locale字段162
6.8.10 数据库或磁盘满了162
6.9 不明觉厉的异常162
6.9.1 内存溢出163
6.9.2 Verify Failed163
6.10 其他情况的异常163
6.10.1 TimeoutException164
6.10.2 JSON解析异常164
6.10.3 JSONArray在初始化时为空164
6.10.4 第三方SDK抛出的Crash165
6.10.5 两个不同类型的View有相同的id165
6.10.6 LayoutInfiater.from().infiate()使用不当导致的崩溃166
6.10.7 ViewGroup中的玄机166
6.10.8 Monkey点击过快导致的崩溃167
6.10.9 图片缩放很多倍168
6.10.10 图片宽高为0168
6.10.11 不能重复添加组件168
6.11 本章小结169
第7章 ProGuard技术详解171
7.1 ProGuard简介171
7.2 ProGuard工作原理172
7.3 如何写一个ProGuard文件172
7.3.1 基本混淆172
7.3.2 针对App的量身定制175
7.3.3 针对第三方jar包的解决方案177
7.4 其他注意事项178
7.5 本章小结179
第8章 持续集成181
8.1 版本管理策略181
8.1.1 三种版本管理策略181
8.1.2 特殊情况的版本管理策略183
8.2 使用Ant脚本打包184
8.2.1 Android打包流程184
8.2.2 打包时的注意事项189
8.3 Monkey包的生成190
8.4 自动打包191
8.4.1 安装和配置各种软件192
8.4.2 准备Ant打包脚本193
8.4.3 配置CCNET193
8.4.4 搭建ⅡS站点下载apk包193
8.4.5 自动打包流程小结193
8.5 批量打渠道包194
8.5.1 基于apk包批量生成渠道包194
8.5.2 基于代码批量生成渠道包195
8.6 Android发版流程197
8.7 分类打渠道包198
8.7.1 分门别类生成渠道包198
8.7.2 批量上传apk的两种方式199
8.8 灵活切换服务器199
8.9 单元测试201
8.10 本章小结203
第9章 App竞品技术分析205
9.1 竞品分析概述205
9.1.1 App竞品定义205
9.1.2 竞品分析要研究的几个方向206
9.1.3 竞品分析与拿来主义206
9.2 App安装包的结构207
9.2.1 Android安装包的结构207
9.2.2 iOS安装包的结构208
9.3 竞品技术一瞥:开机速度208
9.4 竞品技术二瞥:HTML5页面的打开速度209
9.4.1 把HTML5页面嵌入到Zip包中209
9.4.2 Zip包的增量更新机制209
9.4.3 制作Zip增量包210
9.4.4 使用WebView预先加载HTML5并缓存到本地211
9.5 竞品技术三瞥:安装包的大小211
9.5.1 从几件小事说起211
9.5.2 安装包为什么那么大212
9.5.3 png和jpg的区别及使用场景212
9.5.4 Splash、引导图和背景图213
9.5.5 iOS的1倍图、2倍图和3倍图213
9.5.6 在iOS 中进行图片拉伸和旋转214
9.5.7 使用XML配置动画214
9.5.8 iOS使用storyboard还是xib215
9.5.9 字体文件的学问215
9.5.10 表情图片打包下载217
9.5.11 清除未使用图片218
9.5.12 Proguard不只是用来混淆的218
9.5.13 在iOS 中使用pdf格式的图片218
9.5.14 iOS的包永远比Android包体积大吗219
9.5.15 从代码层面减少iOS包的体积220
9.6 竞品技术四瞥:性能优化220
9.6.1 App自动选取最佳服务器的策略220
9.6.2 使用TCP+Protobuf222
9.7 竞品技术五瞥:数据采集工具223
9.7.1 页面跳转器223
9.7.2 打点统计226
9.7.3 ABTest230
9.8 竞品技术六瞥:热修补232
9.8.1 Native页面和HTML5页面的相互切换232
9.8.2 在iOS 中使用脚本编程233
9.9 竞品技术七瞥:曲径通幽237
9.9.1 一切皆可配置237
9.9.2 App 后门238
9.9.3 Android包中 META-INF目录的妙用239
9.9.4 classes.dex的拆与合241
9.10 竞品技术八瞥:模块化拆分242
9.10.1 iOS资源拆分与模块化242
9.10.2 Android模块化拆分243
9.11 竞品技术九瞥:第三方SDK244
9.11.1 HTML5篇244
9.11.2 iOS篇245
9.11.3 Android篇245
9.11.4 其他246
9.12 竞品技术十瞥:版本策略与App彩蛋246
9.12.1 版本策略246
9.12.2 App彩蛋246
9.13 本章小结247
第三部分 项目管理和团队建设251
第10章 项目管理决定了开发速度251
10.1 项目管理中的三驾马车251
10.1.1 为什么不能没有测试团队252
10.1.2 产品经理应做的事253
10.1.3 开发人员的喜怒哀乐254
10.1.4 项目经理的职责254
10.2 优化团队结构,让敏捷流程跑得更快255
10.2.1 平行模式还是垂直模式255
10.2.2 让HTML5站点和MobileAPI的进度提前一个迭代256
10.2.3 如何进行模块化分工256
10.3 App敏捷开发流程257
10.3.1 四周时间的开发流程257
10.3.2 两周时间的开发流程261
10.3.3 一周时间的开发流程262
10.3.4 即时更新策略263
10.4 项目经理的百宝箱263
10.4.1 项目经理的任务评估表263
10.4.2 贴小纸条的艺术264
10.4.3 敏捷迭代中的会议纪要265
10.4.4 开站例会的技巧266
10.4.5 如何确保项目不延期268
10.4.6 迭代风险管理268
10.5 迭代中的测试工作269
10.5.1 冒烟测试269
10.5.2 探索性测试271
10.5.3 Monkey测试271
10.6 高层对敏捷流程的干预272
10.6.1 重构与产品需求的平衡272
10.6.2 提高效率,拒绝6×12273
10.6.3 无线部门的座位安排274
10.6.4 静时276
10.7 本章小结277
第11章 日常工作中的问题解决279
11.1 使用二分法排查问题279
11.2 找到能稳定重现问题的人281
11.3 小流量包282
11.4 建立全国范围的测试群283
11.5 如何与用户沟通284
11.6 日志与App性能286
11.7 从新人入职作业入手286
11.8 本章小结287
第12章 无线团队的组建和管理289
12.1 从面试谈起289
12.1.1 如今是卖方市场289
12.1.2 名校论不适用无线开发290
12.1.3 如何搞到更多的简历290
12.1.4 面试时需要考察的几个点291
12.2 无线团队必备的10份文档292
12.2.1 新员工入职文档292
12.2.2 加强版新员工入职文档292
12.2.3 测试机清单293
12.2.4 模块分工表293
12.2.5 页面逻辑流程文档293
12.2.6 MobileAPI接口分布图295
12.2.7 版本管理策略文档295
12.2.8 框架设计文档295
12.2.9 发版流程文档296
12.2.10 App启动流程图296
12.3 一对一沟通297
12.4 每周技术分享298
12.5 代码评审299
12.6 对Android团队Leader的定位300
12.7 Android应用开发所需技能自我评测301
12.8 App开发人员的学习路线302
12.9 本章小结303