App研发录:架构设计、Crash分析和竞品技术分析
序一序二序三前言第一部分 高效App框架设计与重构第1章 重构,夜未眠 31.1 重新规划Android项目结构 31.2 为Activity定义新的生命周期 51.3 统一事件编程模型 71.4 实体化编程 91.4.1 在网络请求中使用实体 91.4.2 实体生成器 111.4.3 在页面跳转中使用实体 121.5 Adapter模板 141.6 类型安全转换函数 161.7 本章小结 17第2章 Android网络底层框架设计 192.1 网络低层封装 192.1.1 网络请求的格式 192.1.2 AsyncTask的使用和缺点 212.1.3 使用原生的ThreadPoolExecutor + Runnable + Handler 242.1.4 网络底层的一些优化工作 282.2 App数据缓存设计 322.2.1 数据缓存策略 322.2.2 强制更新 352.3 MockService 362…
查看完整
查看完整
包建强,毕业于复旦大学数学系。先后在多家互联网公司担任无线部门技术总监,在Android、iOS、WP等多门无线技术中跋涉过 ,在App的项目管理上也有多年的实践经验。他是微软2008年MVP,并有一个坚持写了6年的技术博客。
《App研发录:架构设计、Crash分析和竞品技术分析》是作者多年App开发的经验总结,重点介绍Android应用开发中常见的实用技巧和疑难问题解决方法,为打造高质量App提供了有价值的实践指导,可帮助读者迅速提升应用开发能力和解决疑难问题的能力。本书涉及的主题有:Android项目的重构、网络底层框架设计、经典场景设计、命名规范和编程规范、Crash的捕获与分析、持续集成、代码混淆、App竞品技术分析、移动项目管理和团队建设等。本书内容丰富,文风幽默,不仅给出疑难问题的解决方案,而且结合示例代码深入剖析这些问题的实质和编程技巧,旨在帮助移动开发人员和管理人员提高编程效率,改进代码质量,打造高质量的App。
序一序二序三前言第一部分 高效App框架设计与重构第1章 重构,夜未眠 31.1 重新规划Android项目结构 31.2 为Activity定义新的生命周期 51.3 统一事件编程模型 71.4 实体化编程 91.4.1 在网络请求中使用实体 91.4.2 实体生成器 111.4.3 在页面跳转中使用实体 121.5 Adapter模板 141.6 类型安全转换函数 161.7 本章小结 17第2章 Android网络底层框架设计 192.1 网络低层封装 192.1.1 网络请求的格式 192.1.2 AsyncTask的使用和缺点 212.1.3 使用原生的ThreadPoolExecutor + Runnable + Handler 242.1.4 网络底层的一些优化工作 282.2 App数据缓存设计 322.2.1 数据缓存策略 322.2.2 强制更新 352.3 MockService 362.4 用户登录 382.4.1 登录成功后的各种场景 392.4.2 自动登录 412.4.3 Cookie过期的统一处理 442.4.4 防止黑客刷库 452.5 HTTP头中的奥妙 462.5.1 HTTP请求 462.5.2 时间校准 482.5.3 开启gzip压缩 512.6 本章小结 52第3章 Android经典场景设计 533.1 App图片缓存设计 533.1.1 ImageLoader设计原理 533.1.2 ImageLoader的使用 543.1.3 ImageLoader优化 553.1.4 图片加载利器Fresco 563.2 对网络流量进行优化 583.2.1 通信层面的优化 583.2.2 图片策略优化 593.3 城市列表的设计 613.3.1 城市列表数据 613.3.2 城市列表数据的增量更新机制 633.4 App与HTML5的交互 643.4.1 App操作HTML5页面的方法 643.4.2 HTML5页面操作App页面的方法 653.4.3 App和HTML5之间定义跳转协议 663.4.4 在App中内置HTML5页面 673.4.5 灵活切换Native和HTML5页面的策略 683.4.6 页面分发器 683.5 消灭全局变量 703.5.1 问题的发现 703.5.2 把数据作为Intent的参数传递 713.5.3 把全局变量序列化到本地 713.5.4 序列化的缺点 753.5.5 如果Activity也被销毁了呢 793.5.6 如何看待SharedPreferences 803.5.7 User是唯一例外的全局变量 803.6 本章小结 81第4章 Android命名规范和编码规范 834.1 Android命名规范 834.2 Android编码规范 864.3 统一代码格式 894.4 本章小结 90第二部分 App开发中的高级技巧第5章 Crash异常收集与统计 935.1 异常收集 935.2 异常收集与统计 965.2.1 人工统计线上Crash数据 965.2.2 第一个线上Crash报表:Crash分类 975.2.3 第二个线上Crash报表:Crash去重 995.2.4 线上Crash的其他分析工作 1045.3 本章小结 105第6章 Crash异常分析 1076.1 Java语法相关的异常 1086.1.1 空指针 1086.1.2 角标越界 1096.1.3 试图调用一个空对象的方法 1106.1.4 类型转换异常 1106.1.5 数字转换错误 1116.1.6 声明数组时长度为-1 1116.1.7 遍历集合同时删除其中元素 1126.1.8 比较器使用不当 1146.1.9 当除数为0 1156.1.10 不能随便使用的asList 1166.1.11 又有类找不到了(一):ClassNotFoundException 1166.1.12 又有类找不到了(二):NoClassDefFoundError 1176.2 Activity相关的异常 1176.2.1 找不到Activity 1176.2.2 不能实例化Activity 1186.2.3 找不到Service 1186.2.4 不能启动BroadcastReceiver 1196.2.5 startActivityForResult不能回传 1196.2.6 猴急的Fragment 1206.3 序列化相关的异常 1206.3.1 实体对象不支持序列化 1216.3.2 序列化时未指定ClassLoader 1216.3.3 反序列化时发现类找不到:被ProGuard混淆导致的崩溃 1226.3.4 反序列化时发现类找不到:传入畸形数据 1236.3.5 反序列化时出错 1236.4 列表相关的异常 1236.4.1 Adapter数据源变化但是没通知ListView 1246.4.2 ListView滚动时点击刷新按钮后崩溃 1256.4.3 AbsListView的obtainView返回空指针 1256.4.4 Adapter数据源变化但是没调用notifyDataSetChanged 1266.5 窗体相关的异常 1266.5.1 窗口句柄泄露 1266.5.2 View not attached to window manager 1286.5.3 窗体在不恰当的时候获取了焦点 1296.5.4 token null is not for an application 1306.5.5 permission denied for this window type 1316.5.6 is your activity running 1316.5.7 添加窗体失败 1336.5.8 AlertDialog.resolveDialogTheme 1346.5.9 The specif?ied child already has a parent 1366.5.10 子线程不能修改UI 1376.5.11 不能在子线程操作AlertDialog和Toast 1416.6 资源相关的异常 1436.6.1 Resources$NotFoundException 1436.6.2 StackOverf?iowError 1446.6.3 Unsatisf?iedLinkError 1446.6.4 Inf?iateException之FileNotFoundException 1456.6.5 Inf?iateException之缺少构造器 1456.6.6 Inf?iateException之style与android:textStyle的区别 1466.6.7 TransactionTooLargeException 1476.7 系统碎片化相关的异常 1476.7.1 NoSuchMethodError 1476.7.2 RemoteViews 1486.7.3 pointerIndex out of range 1496.7.4 SecurityException之一:Intent中图片太大 1506.7.5 SecurityException之二:动态加载其他apk的activity 1516.7.6 SecurityException之三:No permission to modify thread 1516.7.7 view的getDrawingCache()返回null 1526.7.8 DeadObjectException 1536.7.9 Android 2.1不支持SSL 1536.7.10 ViewFlipper引发的血案 1536.7.11 ActivityNotFoundException 1546.7.12 Android 2.2不支持xlargeScreens 1546.7.13 Package manager has died 1556.7.14 SpannableString与富文本字符串 1556.7.15 Can not perform this action after onSaveInstanceState 1566.7.16 Service Intent must be explicit 1576.8 SQLite相关的异常 1576.8.1 No transaction is active 1586.8.2 忘记关闭Cursor 1586.8.3 数据库被锁定 1596.8.4 试图再打开已经关闭的对象 1596.8.5 文件加密了或无数据库 1596.8.6 WebView中SQLLite缓存导致的崩溃 1606.8.7 磁盘读写错误 1616.8.8 android_metadata表不存在 1616.8.9 android_metadata表中的locale字段 1626.8.10 数据库或磁盘满了 1626.9 不明觉厉的异常 1626.9.1 内存溢出 1636.9.2 Verify Failed 1636.10 其他情况的异常 1636.10.1 TimeoutException 1646.10.2 JSON解析异常 1646.10.3 JSONArray在初始化时为空 1646.10.4 第三方SDK抛出的Crash 1656.10.5 两个不同类型的View有相同的id 1656.10.6 LayoutInf?iater.from().inf?iate()使用不当导致的崩溃 1666.10.7 ViewGroup中的玄机 1666.10.8 Monkey点击过快导致的崩溃 1676.10.9 图片缩放很多倍 1686.10.10 图片宽高为0 1686.10.11 不能重复添加组件 1686.11 本章小结 169第7章 ProGuard技术详解 1717.1 ProGuard简介 1717.2 ProGuard工作原理 1727.3 如何写一个ProGuard文件 1727.3.1 基本混淆 1727.3.2 针对App的量身定制 1757.3.3 针对第三方jar包的解决方案 1777.4 其他注意事项 1787.5 本章小结 179第8章 持续集成 1818.1 版本管理策略 1818.1.1 三种版本管理策略 1818.1.2 特殊情况的版本管理策略 1838.2 使用Ant脚本打包 1848.2.1 Android打包流程 1848.2.2 打包时的注意事项 1898.3 Monkey包的生成 1908.4 自动打包 1918.4.1 安装和配置各种软件 1928.4.2 准备Ant打包脚本 1938.4.3 配置CCNET 1938.4.4 搭建IIS站点下载apk包 1938.4.5 自动打包流程小结 1938.5 批量打渠道包 1948.5.1 基于apk包批量生成渠道包 1948.5.2 基于代码批量生成渠道包 1958.6 Android发版流程 1978.7 分类打渠道包 1988.7.1 分门别类生成渠道包 1988.7.2 批量上传apk的两种方式 1998.8 灵活切换服务器 1998.9 单元测试 2018.10 本章小结 203第9章 App竞品技术分析 2059.1 竞品分析概述 2059.1.1 App竞品定义 2059.1.2 竞品分析要研究的几个方向 2069.1.3 竞品分析与拿来主义 2069.2 App安装包的结构 2079.2.1 Android安装包的结构 2079.2.2 iOS安装包的结构 2089.3 竞品技术一瞥:开机速度 2089.4 竞品技术二瞥:HTML5页面的打开速度 2099.4.1 把HTML5页面嵌入到Zip包中 2099.4.2 Zip包的增量更新机制 2099.4.3 制作Zip增量包 2109.4.4 使用WebView预先加载HTML5并缓存到本地 2119.5 竞品技术三瞥:安装包的大小 2119.5.1 从几件小事说起 2119.5.2 安装包为什么那么大 2129.5.3 png和jpg的区别及使用场景 2129.5.4 Splash、引导图和背景图 2139.5.5 iOS的1倍图、2倍图和3倍图 2139.5.6 在iOS中进行图片拉伸和旋转 2149.5.7 使用XML配置动画 2149.5.8 iOS使用storyboard还是xib 2159.5.9 字体文件的学问 2159.5.10 表情图片打包下载 2179.5.11 清除未使用图片 2189.5.12 Proguard不只是用来混淆的 2189.5.13 在iOS中使用pdf格式的图片 2189.5.14 iOS的包永远比Android包体积大吗 2199.5.15 从代码层面减少iOS包的体积 2209.6 竞品技术四瞥:性能优化 2209.6.1 App自动选取最佳服务器的策略 2209.6.2 使用TCP+Protobuf 2229.7 竞品技术五瞥:数据采集工具 2239.7.1 页面跳转器 2239.7.2 打点统计 2269.7.3 ABTest 2309.8 竞品技术六瞥:热修补 2329.9 竞品技术七瞥:曲径通幽 2379.10 竞品技术八瞥:模块化拆分 2429.11 竞品技术九瞥:第三方SDK 2449.12 竞品技术十瞥:版本策略与App彩蛋 2469.13 本章小结 247第三部分 项目管理和团队建设第10章 项目管理决定了开发速度 25110.1 项目管理中的三驾马车 25110.2 优化团队结构,让敏捷流程跑得更快 25510.3 App敏捷开发流程 25710.4 项目经理的百宝箱 26310.5 迭代中的测试工作 26910.6 高层对敏捷流程的干预 27210.7 本章小结 277第11章 日常工作中的问题解决 27911.1 使用二分法排查问题 27911.2 找到能稳定重现问题的人 28111.3 小流量包 28211.4 建立全国范围的测试群 28311.5 如何与用户沟通 28411.6 日志与App性能 28611.7 从新人入职作业入手 28611.8 本章小结 287第12章 无线团队的组建和管理 28912.1 从面试谈起 28912.2 无线团队必备的10份文档 29212.3 一对一沟通 29712.4 每周技术分享 29812.5 代码评审 29912.6 对Android团队Leader的定位 30012.7 Android应用开发所需技能自我评测 30112.8 App开发人员的学习路线 30212.9 本章小结 303
^ 收 起
^ 收 起
包建强,毕业于复旦大学数学系。先后在多家互联网公司担任无线部门技术总监,在Android、iOS、WP等多门无线技术中跋涉过 ,在App的项目管理上也有多年的实践经验。他是微软2008年MVP,并有一个坚持写了6年的技术博客。
《App研发录:架构设计、Crash分析和竞品技术分析》是作者多年App开发的经验总结,重点介绍Android应用开发中常见的实用技巧和疑难问题解决方法,为打造高质量App提供了有价值的实践指导,可帮助读者迅速提升应用开发能力和解决疑难问题的能力。本书涉及的主题有:Android项目的重构、网络底层框架设计、经典场景设计、命名规范和编程规范、Crash的捕获与分析、持续集成、代码混淆、App竞品技术分析、移动项目管理和团队建设等。本书内容丰富,文风幽默,不仅给出疑难问题的解决方案,而且结合示例代码深入剖析这些问题的实质和编程技巧,旨在帮助移动开发人员和管理人员提高编程效率,改进代码质量,打造高质量的App。
比价列表
1人想要
公众号、微信群
缺书网
微信公众号
微信公众号
扫码进群
实时获取购书优惠
实时获取购书优惠