第一章

  1. 在13页提到“系统只在Activity异常终止的时候才会调用onSaveInstanceState与onRestoreInstanceState来储存和恢复数据,其他情况不会触发这个过程。”这句话的描述不确切,准确点说,应该是“系统只在Activity异常终止的时候才会调用onSaveInstanceState与onRestoreInstanceState来储存和恢复数据,其他情况不会触发这个过程。但是按Home键或者启动新Activity仍然会单独触发onSaveInstanceState的调用。”
  2. 在25页中提到“最后再在MainActivity中单击按钮启动SecondActivity,现在按back键,然后看到的是哪个Activity?”这句话表达不确切,准确点说,应该是“然后按两次back键”,详情可以参考具体的分析。
  3. 第12页第一行中“在我们选择屏幕以后”,改为“当我们旋转屏幕以后”。
  4. 第28页的第一句话,“这个模式一般需要和FLAG_ACTIVITY_NEW_TASK 配合使用,在这种情况下”,改为“这个标记位一般会和singleTask启动模式一起出现,在这种情况下”。
  5. 第1.2.2小节中,Activity的Flags,这一节的内容直接翻译了Android官方文档(http://developer.android.com/guide/components/tasks-and-back-stack.html#TaskLaunchModes),但是经过实例验证,发现书中的描述不准确(或者说官方文档中的描述不准确),结论为:Flags并不能简单地等同于启动模式,这一块内容需要进一步验证。

第二章

  1. 在47页中提到“以上就是Parcelable和Serializable和区别”。此处有笔误,应该是“以上就是Parcelable和Serializable的区别”。
  2. 在47页中提到“直观来说,Binder是Android中的一个类,它继承了IBinder接口。”此处用语不严谨,应该为“它实现了IBinder接口”。
  3. 在86页中提到“其中 beginBroadcast 和 beginBroadcast 必须要配对使用,哪怕我们仅仅是想要获取 RemoteCallbackList 中的元素个数”。此处有笔误,应该是“其中 beginBroadcast 和 finishBroadcast 必须要配对使用,哪怕我们仅仅是想要获取 RemoteCallbackList 中的元素个数”。
  4. 在36页中提到“Linux上可以通过命名管道、共享内容、信号量等来进行进程间通信”,改为”Linux上可以通过命名管道、共享内存、信号量等来进行进程间通信“。
  5. 在42页中倒数第6行提到” 在 Android 中也提供了新的序列化方式,那就是 Parcelable 接口,使用 Parcelable 来实现对象的序列号。“,改为”在 Android 中也提供了新的序列化方式,那就是 Parcelable 接口,使用 Parcelable 来实现对象的序列化。“
  6. 第90页,aidl那一节,服务端和客户端如果是两个工程,则在Service的onBind方法中无法验证客户端的权限。原因是onBind方法并不是一个Binder调用,它运行在服务端的UI线程中,故在onBind中只能验证服务端的权限,然而这是没有意义的。推荐大家按照第二种方法,在onTransact方法中对客户端进行权限验证。

第三章

  1. 第132页中提到” 上面简单介绍了通过动画来移动 View 的方法,关于动画会在第 5 章中进行详细说明“,改为”上面简单介绍了通过动画来移动 View 的方法,关于动画会在第 7 章中进行详细说明“。同理,135页中的第5章也应该是第7章。
  2. 第125页中提到” ACTION_UP——手机从屏幕上松开的一瞬间。“,改为”ACTION_UP——手指从屏幕上松开的一瞬间。“
  3. 第126页中提到” 接着,当我们先知道当前的滑动速度时,这个时候可以采用如下方式来获得当前的速度“,改为”接着,当我们想知道当前的滑动速度时,这个时候可以采用如下方式来获得当前的速度“。
  4. 第138页中3.3.2小节中,应该是“以下代码可以让一个View在100ms内向右移动100像素”,向左是笔误,应该是向右。

第四章

  1. 第196页中提到” 下面我们来回答一个在 4.3.2 节中提到的问题: View 的测量宽/高和最终/宽高有什么区别?“,改为”下面我们来回答一个在 4.3.2 节中提到的问题: View 的测量宽/高和最终宽/高有什么区别?“
  2. 第207页中” mColor = a.getColor(styleable.CircleView_circle_color, Color.RED); “,改为”mColor = a.getColor(R.styleable.CircleView_circle_color, Color.RED); “
  3. 第207页中,“通过 recycle 方法来实现资源,这样 CircleView 中所做的工作就完成了。“,改为”通过 recycle 方法来释放资源,这样 CircleView 中所做的工作就完成了。“
  4. 第176页中提到” 如何得到 content 呢?可以这样:ViewGroup content= findViewById(R.android.id.content)。“,改为”如何得到 content 呢?可以这样:ViewGroup content= (ViewGroup)findViewById(android.R.id.content)。“
  5. 182页中最下面的表格里,左下方的“warap_content” 改为 “wrap_content”。
  6. 205页中的代码有误,改为:
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    final int paddingLeft = getPaddingLeft();
    final int paddingRight = getPaddingRight();
    final int paddingTop = getPaddingTop();
    final int paddingBottom = getPaddingBottom();
    int width = getWidth() - paddingLeft - paddingRight;
    int height = getHeight() - paddingTop - paddingBottom;
    int radius = Math.min(width, height) / 2;
    canvas.drawCircle(paddingLeft + width / 2, paddingTop + height/2, radius, mPaint);
    }
  7. 209中的代码的最后一段有误,改为:
    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    final int paddingLeft = getPaddingLeft();
    final int paddingRight = getPaddingRight();
    final int paddingTop = getPaddingTop();
    final int paddingBottom = getPaddingBottom();
    int width = getWidth() - paddingLeft - paddingRight;
    int height = getHeight() - paddingTop - paddingBottom;
    int radius = Math.min(width, height) / 2;
    canvas.drawCircle(paddingLeft + width / 2, paddingTop + height / 2, radius, mPaint);
    }

第六章

  1. 在250页中提到”android:endColo——渐变的结束色“,此处有笔误,应该是”android:endColor——渐变的结束色“

第七章

  1. 第278页中的代码有误,改为:android:repeatMode=[“restart” | “reverse”]
  2. 第279页中的提到“另一个是 android:repeatMode,它表示动画循环的模式,有两个选项: “repeat”和“reverse” ,分别表示连续重复和逆向重复。”,改为“另一个是 android:repeatMode,它表示动画循环的模式,有两个选项: “restart”和“reverse” ,分别表示连续重复和逆向重复。”

第九章

  1. 第336页中提到” Service 的启动过程从 ContextWrapper 的 startActivity 开始,如下所示。“,改为”Service 的启动过程从 ContextWrapper 的 startService 开始,如下所示。“
  2. 第337页中提到” 下面继续看 ContextImpl 的 startActivity 的实现,如下所示。“,改为”下面继续看 ContextImpl 的 startService的实现,如下所示。“

第十章

  1. 在372页中提到“由于Android开发规范的限制,我们并不能在主线程中访问UI控件“。此处有笔误,应该是”我们并不能在子线程中访问UI控件“。

第十三章

  1. 第468页中提到“为了更好地对多插件进行支持,需要合理地去管理各个插件的 DexClassoader “,改为”为了更好地对多插件进行支持,需要合理地去管理各个插件的 DexClassLoader “。

第十五章

  1. 在502页中提到“适当使用软引用和软引用”。此处有笔误,应该是“适当使用软引用和弱引用”。
  2. 在507页中提到”一个合理的命令风格可以让读者阅读源码就像在阅读注释一样“,此处有笔误,应该是”一个合理的命名风格可以让读者阅读源码就像在阅读注释一样“

说明

欢迎大家向我反馈勘误信息,在本文下面留言即可,我会更新在本文中。所有的勘误将会在本书重印时予以修正,所以希望大家多多向我反馈勘误信息。

注意:本文正文以及留言中所有的勘误都将在《Android开发艺术探索》第四次印刷时全部修正。
PS:最近很多同学问我哪里可以购买到第四次印刷的书,其实目前市面上都是四次印刷以后的书了,只是京东等网站懒得更新图书信息而已,所以大家勇敢地购买吧!

书中源代码下载

https://github.com/singwhatiwanna/android-art-res

  • 欢迎大家加入我的知识星球,一起学习交流

《Android开发艺术探索》图书勘误相关推荐

  1. 《Android开发艺术探索》读书笔记——Cha3.2.2使用动画实现View的滑动

    章节来自<Android开发艺术探索> 第一种方式 3.2.2 使用动画 上一节介绍了采用scrollTo/scrollBy来实现View的滑动,本节介绍另外一种滑动方式,即使用动画,通过 ...

  2. 《Android开发艺术探索》自定义View中关于“HorizontalScrollViewEx”的改进

    在<Android开发艺术探索>一书中自定义View一节中提到了关于一个类似横向滑动List的自定义ViewGroup:HorizontalScrollViewEx.如果你使用过的话就会发 ...

  3. 《android开发艺术探索》读书笔记(五)--RemoteViews

    接上篇<android开发艺术探索>读书笔记(四)--View工作原理 No1: RemoteViews使用场景:通知栏和桌面小部件 No2: 通知栏主要通过NotificationMan ...

  4. Android开发艺术探索——第七章:Android动画深入分析

    Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类 ...

  5. Android开发艺术探索读书笔记(一)

    首先向各位严重推荐主席这本书<Android开发艺术探索>. 再感谢主席邀请写这篇读书笔记 + 书评.书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书 ...

  6. Android开发艺术探索--第二章IPC机制(2)之Binder

    最近在拜读任主席的Android开发艺术探索,现在看了一半,再回头看前面的,感觉跟没有看一样,所以还是把知识点总结一下吧,这一节咱们来讲一下IPC中的Binder 直观来说,Binder是Androi ...

  7. Android开发艺术探索完结篇——天道酬勤

    这片文章发布,代表着我已经把本书和看完并且笔记也发布完成了,回忆了一下我看Android群英传,只用了两个月,但是看本书却花了2016年05月04日 - 2018年07月16日,整整两年多,真是惭愧 ...

  8. Android 开发艺术探索——第十章 Android的消息机制

    Android 开发艺术探索--第十章 Android的消息机制读书笔记 Handler并不是专门用于更新UI的,只是常被用来更新UI 概述 Android的消息机制主要值得就是Handler的运行机 ...

  9. 《Android开发艺术探索》完结篇

    笔记链接: <Android开发艺术探索>之Activity的生命周期和启动模式(一) <Android开发艺术探索>之IPC机制上(二) <Android开发艺术探索& ...

最新文章

  1. 智能驾驶时代已经到来
  2. 图像几何变换之透视变换
  3. 【原创】DevExpress控件GridControl中的布局详解
  4. 一位 CEO 对 CTO 技术领导力的期待是什么?
  5. 摆脱困境:向REST API添加验证
  6. 10 个令人惊喜的 jQuery 插件推荐
  7. linux驱动架构变化,Linux网卡驱动架构分析
  8. 虚拟人出新晋卷王,无薪工作70天却没人认出来
  9. 第三届阿里云磐久智维算法大赛——GRU BaseLine
  10. 网络攻防技术(2021期末考试)
  11. 父亲发现高三女儿早恋 机智做法让网友惊呆
  12. SAS(五)建立SAS数据集的方法及导出数据
  13. 写高效的java代码
  14. 啦啦!记录学校C语言作业
  15. android wear手表6,Android Wear(手表)开发
  16. 1.【R包管理】查看安装目录和已有R包、安装、使用、迁移
  17. 金融业信贷风控算法4-python的入门和介绍
  18. 小程序影藏溢出的gif_你的GIF动图不够酷炫?可能是你还不知道这5个有趣的网站!...
  19. [讨论]日本地震对中国软件服务外包行业的影响分析(宏观)
  20. 5.2 应用程序和驱动程序中buffer的传输流程

热门文章

  1. 利用大数据 勾画虚开企业脸谱
  2. 2014年总结和2015年计划
  3. 和技术大咖们一起工作是怎样的体验?擎创招人进行时,你~要上车吗?
  4. CSS尺寸与文本讲解。HTML、CSS笔记(四)。
  5. Texture tiling
  6. 【堡塔企业级防篡改-重构版】使用手册
  7. NS2学习---可视化Tcl生成工具NSG2
  8. Disallow self-closing on HTML void elements
  9. html显示svg图片,HTML5/CSS3系列教程:使用SVG图片
  10. 《终身成长》读书分享(附思维导图)