`

[书评]深入潜出Google Android

阅读更多
首先感谢图灵教育的刘江大人赠书 http://www.turingboo.com

270多页, 还行, 阅读量不算很大, 封面设计不错, 每个章节都有一句诗词相配, 很有意思.
对于初学者来说, 这本书还是值得一看的, 特别是英文不够好的朋友, 起码有点中文的资料可以参考.
当然, 书中一些内容可能过于简化, 对初学者来说, 有些地方解释的不够清楚.  所以定位这本书的目标开发者群就有点尴尬, 初学者需要更多的解释和示范; 已经起步的同学需要更深奥的东西, 但内容又相对不是很深入.
不过总的来说看完全书后, 一个新手应该对Android的系统有一定的了解了, 然后可以参考文档和SDK里面的ApiDemos来进一步学习.

好了, 现在开始拍砖.  不拍就不会有进步了.

第一,二章
介绍Android和SDK配置...

第三章
主要介绍了Android的几个主要部分和Activity的生命周期.
个人觉得如果看过Android文档关于这部分的内容的话, 这章可以粗粗得看一下, 基本上差不多的内容.

第四章
用户界面的基本介绍, 介绍了一些常见的界面控制器和用法.

第五章
这章写得还不错, 就是Intent这些介绍还是略显短了点.  Intent是android SDK的一个很重要的部分, 值得多写一些相关内容.

第六章
中规中矩, 不过如果可以介绍下Remote Service和AIDL会更好.

第七章

第152页
UrlEncodedFormEntity [color=red]p_entity[/color] = new ...

这位同学连java的命名规范都弄错了...

第174页, catch exception里面是e.printStackTrace().
这个... 打印给谁看啊?  正确的作法是用Android的Log来记录:
Log.e(TAG, e.getMessage(), e);



第八章
第182页和185页
在updateWithNewLocation(Location location)的方法中:
TextView myLocationText;
myLocationText = (TextView)findViewById(R.id.myLocationText);


这段获取TextView的代码应该在onCreate()里面才合适.  不然每次这个方法被调用, 都要重新new出一个TextView, 内存上的大忌.

第189页
protected boolean isRouteDisplayed() {
return false;
}

原文是"它表示是否需要在地图上绘制导航线路".
意义上确实如此, 但这个方法目前只能返回false, 因为目前android被明令禁止提供实时路况信息.
如果return true的话, app是通不过审查的.  所以不是"是否"的问题, 而是必须是要返回false.

第192页
最下面那段, 需要用MapView对象调用getControl()方法来获得一个MapControl.
这里应该是getController(), 获得一个MapController.

第194页
在map的缩放代码那里
inBtn = ...
outBtn = ...
OnClickListener listener = new ... {
switch (v.getId()) {
case R.id.in:
ctrlMap.controlIn();
break;
case R.id.out:
ctrlMap.controlOut();
break;
...
}
inBtn.setOnClickListener(listener);
outBtn.setOnClickListener(listener);

代码没错.  但既然zoom in和out都有对应的button了, 何必搞一个listener, 然后每次在onClick里面判断到底是哪个button被按了呢?  分开两个listener就可以了.  多了一个listener的实例, 但代码更精炼, 逻辑更直接.  运行的时候少了一大批stack里面的method pop (v.getId()).  (貌似前面几章也有类似的问题).

第九章

我个人觉得SharedPreferences应该放在前面, 接下来是File IO, 最后是Sqlite/Content Provider.
一般章节安排都是由浅入深, 读者的接受上比较自然.

第223页
上面的"getTyper()"印错了, 应该是getType().

第十章
由于本人还没怎么正式接触开发widget和live folder, 所以这章内容对我来说还是挺好玩的

第十一章
虚拟键盘的部分最近也接触了一些, 比较繁琐.  如果不是自己开发输入法的话, 还是不要碰为好.

第十二章
第278到279页.  关于程序升级的事情.  以前Market没有提供自动升级的时候, 是要在自己的app里面检测版本号, 然后和自己服务器端的版本号比较, 如果需要升级的, 给用户一个提示.  文中并没有写一个如何获取版本号的代码.  其实这个从PackageManager拿版本号的代码很简单:
PackageInfo pi = this.getApplication().getPackageManager().getPackageInfo(this.getApplication().getPackageName(), 0);
            int currentVersion = pi.versionCode;
            
            int latestVersion = // 从web server拿最新版本号, 简单的HTTP GET
            
            if (latestVersion > currentVersion) {

            }



第十三章

先声明, 一下所做的评论有马后炮,事后诸葛亮的嫌隙, 现担待下.
这篇首先就写了那个Sun的程序员, 在AppStore上一夜暴富的故事.  这里就有明显误导的嫌疑了.  这里是说Android, 最好是拿一个Market上面成功的例子.  用iPhone的AppStore成功经历来侧面暗示Android Market也会成功, 很不妥.  很多事情, 不是说你做了个门户很成功, 我也做个一样的, 肯定也成功.  这里最好保留谨慎的态度, 因为目前Market的发展并没有AppStore那么好.  想一夜暴富还很远呢.

关于Market的几个优点, 不敢苟同. 

比如Market默认结合了Web 2.0社区功能.  这个哪里有??
比如Android配合YouTube类似的评分和反馈.  其实大家都知道, Market软件的说明最多是325个字, 而且app的截图上传直到前一段时间才实现.  和苹果的AppStore相比, 相差得很远.

比如数据分析工具.  Google并没有提供任何的分析工具给Android app.  除了付费app在google checkout里面看看销售和付款的数据以外, 其他的什么都没有.  是的, NOTHING!

比如市场广阔.  这个是有点放眼未来的意思.  市场确实广阔, 但各大厂商和手机硬件商都想摆脱google Market的束缚而开发自己的App Store.  目前已经推出的app store就有6,7家了, 而且这种趋势还有井喷的苗头.  对开发者来说, 面对众多的app stores, 到底要花费多少精力来管理app发布呢?

Market最致命的一点, 而且也是让Google最尴尬的一点, 就是Market的搜索烂到不行, 根本不知道这个搜索的算法是谁写的, 比SQL里面的LIKE都差.

(由于我是从后来章节开始往前看的, 所以评论是越到后门越多).

治学要严谨, 写书尤其如此.  本书作者们提供了中国Android开发者第一手的中文材料, 值得表扬.
但是出版前必要的校对和核实是必须的.  可能是上市时间仓促的问题, 所以还有以上一些问题.
希望下个版本可以改进.
分享到:
评论
28 楼 wcily123 2012-02-02  
lordhong 写道
jjcang 写道
大神一定没有用过e.printStackTrace().
是可以的。android log里有个system.err的标签。
所有java错误输出都重定向这个tag里了。


logcat是可以看到stack trace, 但我的意思是要使用android的Log框架来记录异常



支持log
27 楼 lordhong 2009-11-29  
melode11 写道
还有,实时路况信息和route貌似不是同一样东西,前一个就是traffic信息,主要指交通流量大小,后面那个是路线了


这个是根据Google地图协议, 第三方app, 没有经过许可的话, 不能提供即时路线计算和导航的功能, 有数据licesne的因素, 也有安全责任的因素在里面
26 楼 lordhong 2009-11-29  
melode11 写道
还有,实时路况信息和route貌似不是同一样东西,前一个就是traffic信息,主要指交通流量大小,后面那个是路线了


这个是根据Google地图协议, 第三方app, 没有经过许可的话, 不能提供即时路线计算和导航的功能, 有数据licesne的因素, 也有安全责任的因素在里面
25 楼 melode11 2009-11-29  
还有,实时路况信息和route貌似不是同一样东西,前一个就是traffic信息,主要指交通流量大小,后面那个是路线了
24 楼 melode11 2009-11-29  
lordhong 写道
首先感谢图灵教育的刘江大人赠书 http://www.turingboo.com

270多页, 还行, 阅读量不算很大, 封面设计不错, 每个章节都有一句诗词相配, 很有意思.
对于初学者来说, 这本书还是值得一看的, 特别是英文不够好的朋友, 起码有点中文的资料可以参考.
当然, 书中一些内容可能过于简化, 对初学者来说, 有些地方解释的不够清楚.  所以定位这本书的目标开发者群就有点尴尬, 初学者需要更多的解释和示范; 已经起步的同学需要更深奥的东西, 但内容又相对不是很深入.
不过总的来说看完全书后, 一个新手应该对Android的系统有一定的了解了, 然后可以参考文档和SDK里面的ApiDemos来进一步学习.

好了, 现在开始拍砖.  不拍就不会有进步了.

第一,二章
介绍Android和SDK配置...

第三章
主要介绍了Android的几个主要部分和Activity的生命周期.
个人觉得如果看过Android文档关于这部分的内容的话, 这章可以粗粗得看一下, 基本上差不多的内容.

第四章
用户界面的基本介绍, 介绍了一些常见的界面控制器和用法.

第五章
这章写得还不错, 就是Intent这些介绍还是略显短了点.  Intent是android SDK的一个很重要的部分, 值得多写一些相关内容.

第六章
中规中矩, 不过如果可以介绍下Remote Service和AIDL会更好.

第七章

第152页
UrlEncodedFormEntity [color=red]p_entity[/color] = new ...

这位同学连java的命名规范都弄错了...

第174页, catch exception里面是e.printStackTrace().
这个... 打印给谁看啊?  正确的作法是用Android的Log来记录:
Log.e(TAG, e.getMessage(), e);



第八章
第182页和185页
在updateWithNewLocation(Location location)的方法中:
TextView myLocationText;
myLocationText = (TextView)findViewById(R.id.myLocationText);


这段获取TextView的代码应该在onCreate()里面才合适.  不然每次这个方法被调用, 都要重新new出一个TextView, 内存上的大忌.

第189页
protected boolean isRouteDisplayed() {
return false;
}

原文是"它表示是否需要在地图上绘制导航线路".
意义上确实如此, 但这个方法目前只能返回false, 因为目前android被明令禁止提供实时路况信息.
如果return true的话, app是通不过审查的.  所以不是"是否"的问题, 而是必须是要返回false.

第192页
最下面那段, 需要用MapView对象调用getControl()方法来获得一个MapControl.
这里应该是getController(), 获得一个MapController.

第194页
在map的缩放代码那里
inBtn = ...
outBtn = ...
OnClickListener listener = new ... {
switch (v.getId()) {
case R.id.in:
ctrlMap.controlIn();
break;
case R.id.out:
ctrlMap.controlOut();
break;
...
}
inBtn.setOnClickListener(listener);
outBtn.setOnClickListener(listener);

代码没错.  但既然zoom in和out都有对应的button了, 何必搞一个listener, 然后每次在onClick里面判断到底是哪个button被按了呢?  分开两个listener就可以了.  多了一个listener的实例, 但代码更精炼, 逻辑更直接.  运行的时候少了一大批stack里面的method pop (v.getId()).  (貌似前面几章也有类似的问题).

第九章

我个人觉得SharedPreferences应该放在前面, 接下来是File IO, 最后是Sqlite/Content Provider.
一般章节安排都是由浅入深, 读者的接受上比较自然.

第223页
上面的"getTyper()"印错了, 应该是getType().

第十章
由于本人还没怎么正式接触开发widget和live folder, 所以这章内容对我来说还是挺好玩的

第十一章
虚拟键盘的部分最近也接触了一些, 比较繁琐.  如果不是自己开发输入法的话, 还是不要碰为好.

第十二章
第278到279页.  关于程序升级的事情.  以前Market没有提供自动升级的时候, 是要在自己的app里面检测版本号, 然后和自己服务器端的版本号比较, 如果需要升级的, 给用户一个提示.  文中并没有写一个如何获取版本号的代码.  其实这个从PackageManager拿版本号的代码很简单:
PackageInfo pi = this.getApplication().getPackageManager().getPackageInfo(this.getApplication().getPackageName(), 0);
            int currentVersion = pi.versionCode;
            
            int latestVersion = // 从web server拿最新版本号, 简单的HTTP GET
            
            if (latestVersion > currentVersion) {

            }



第十三章

先声明, 一下所做的评论有马后炮,事后诸葛亮的嫌隙, 现担待下.
这篇首先就写了那个Sun的程序员, 在AppStore上一夜暴富的故事.  这里就有明显误导的嫌疑了.  这里是说Android, 最好是拿一个Market上面成功的例子.  用iPhone的AppStore成功经历来侧面暗示Android Market也会成功, 很不妥.  很多事情, 不是说你做了个门户很成功, 我也做个一样的, 肯定也成功.  这里最好保留谨慎的态度, 因为目前Market的发展并没有AppStore那么好.  想一夜暴富还很远呢.

关于Market的几个优点, 不敢苟同. 

比如Market默认结合了Web 2.0社区功能.  这个哪里有??
比如Android配合YouTube类似的评分和反馈.  其实大家都知道, Market软件的说明最多是325个字, 而且app的截图上传直到前一段时间才实现.  和苹果的AppStore相比, 相差得很远.

比如数据分析工具.  Google并没有提供任何的分析工具给Android app.  除了付费app在google checkout里面看看销售和付款的数据以外, 其他的什么都没有.  是的, NOTHING!

比如市场广阔.  这个是有点放眼未来的意思.  市场确实广阔, 但各大厂商和手机硬件商都想摆脱google Market的束缚而开发自己的App Store.  目前已经推出的app store就有6,7家了, 而且这种趋势还有井喷的苗头.  对开发者来说, 面对众多的app stores, 到底要花费多少精力来管理app发布呢?

Market最致命的一点, 而且也是让Google最尴尬的一点, 就是Market的搜索烂到不行, 根本不知道这个搜索的算法是谁写的, 比SQL里面的LIKE都差.

(由于我是从后来章节开始往前看的, 所以评论是越到后门越多).

治学要严谨, 写书尤其如此.  本书作者们提供了中国Android开发者第一手的中文材料, 值得表扬.
但是出版前必要的校对和核实是必须的.  可能是上市时间仓促的问题, 所以还有以上一些问题.
希望下个版本可以改进.

个人认为e.printStackTrace还不是Log.e(TAG, e.getMessage(), e)可以替代的。前者对于debug作用大太多了。
findViewById我认为这句话对内存影响几乎没有,因为所有的View不管临时变量引用它与否,都是在的,新建的临时的引用变量,只不过4字节,而且是存在stack中,一出作用域即刻被销毁。这段的问题是可能要多花点cpu资源,就看findViewById这个google实现的方法,开销如何了。
listener那个倒是非常赞同,几个button逻辑糅合一起,button一旦很多就没法维护了,作为例子,也许是作者偷懒吧...
23 楼 风小却 2009-11-25  
引用
因为目前android被明令禁止提供实时路况信息.
如果return true的话, app是通不过审查的.  所以不是"是否"的问题, 而是必须是要返回false.


这是因为什么?
22 楼 lordhong 2009-10-16  
joyband 写道
我没看过这本书,只看了高焕堂的那本叫啥36计的,而且还是繁体的电子版,看的很不顺溜,不过也能看个大概,不知道这两本书有什么区别?hong看过的话,给个建议?还是直接看官方英文文档?我英文有点烂。


这本书写得还可以的, 英文烂的话就先看中文的书吧
21 楼 joyband 2009-10-16  
我没看过这本书,只看了高焕堂的那本叫啥36计的,而且还是繁体的电子版,看的很不顺溜,不过也能看个大概,不知道这两本书有什么区别?hong看过的话,给个建议?还是直接看官方英文文档?我英文有点烂。
20 楼 lordhong 2009-10-15  
hzd822 写道
我是新人,刚拿到次数不久,感觉不错,至少很容易上手,另外对于书中有个问题想请教下。就是在第八章介绍LocationManager 的,关于LocationListener的那段,为什么我执行模拟器的时候只能监听到一次,第二次用DDMS改变经纬度就无法再监听到了,代码基本参照书上的代码。不知道是我环境的原因还是书上代码的原因。。

这个... 调试GPS/Location这些东西还是真机比较精确, 模拟器貌似问题多多
19 楼 pJun 2009-10-15  
lordhong 写道
rubynroll 写道
深入浅出?


... 那是另外本书吧... Orz...


我瞄了眼,确实是深入浅出 而不是 深入潜出
18 楼 hzd822 2009-10-15  
我是新人,刚拿到次数不久,感觉不错,至少很容易上手,另外对于书中有个问题想请教下。就是在第八章介绍LocationManager 的,关于LocationListener的那段,为什么我执行模拟器的时候只能监听到一次,第二次用DDMS改变经纬度就无法再监听到了,代码基本参照书上的代码。不知道是我环境的原因还是书上代码的原因。。
17 楼 lordhong 2009-10-14  
rubynroll 写道
深入浅出?


... 那是另外本书吧... Orz...
16 楼 rubynroll 2009-10-14  
深入浅出?
15 楼 lordhong 2009-10-14  
zxhwolfe 写道
hoho,不小心看到,标题有错别字哈--[书评]深入潜出Google Android。
有一本叫做《Android SDK范例大全》个人觉得很不错

错别字... 哪里啊? 
14 楼 zxhwolfe 2009-10-14  
hoho,不小心看到,标题有错别字哈--[书评]深入潜出Google Android。
有一本叫做《Android SDK范例大全》个人觉得很不错
13 楼 pochonlee 2009-10-13  
买了这本书,看看就知道如何了。
12 楼 pure 2009-10-10  
别字很多的,比如“继承”写成“集成”等等,有好几处,不过作为中文入门教程还是很不错的,后面看了一下官方的ApiDemo,原来书中的大多数案例都是参考这个来的。呵呵,不过中文看中舒服些。
11 楼 風一樣的男子 2009-10-09  
正在读这本书,不过都是快速浏览式,打算先对 Android 有总体了解后再看官方的资料
10 楼 alexma 2009-10-07  
ahao99 写道
学习了。
Log.e(TAG, e.getMessage(), e); 
这里的TAG指的是什么?



自己定义的常量,一个字符串,可以用于 log 的显示过滤。
9 楼 lordhong 2009-10-05  
JimyChen 写道
Hong老大写篇对Intent深入理解的文章吧

囧...  只可意会... 不可言传...

相关推荐

    深入潜出MFC_2e_2

    C++编程经典 深入潜出MFC

    用友NC开发平台 深入潜出讲解

    用友NC开发平台深入潜出讲解 本文档对用友NC开发平台进行了深入潜出的讲解,旨在帮助开发者快速基于NC平台进行二次开发。NC平台是一款功能强大且灵活的开发工具,能够满足企业的多种需求。通过本文档,开发者可以...

    深入潜出MFC_2e_1

    C++编程的经典之作:深入潜出MFC

    深入潜出MFC.pdf

    《深入潜出MFC》是一本专注于Microsoft Foundation Classes (MFC) 的技术书籍,MFC 是微软为Windows应用程序开发提供的一套C++类库。它将Windows API封装为面向对象的类,使得开发者能用C++更加高效地构建桌面应用...

    深入潜出Python

    《深入潜出Python》是一本深受程序员喜爱的Python学习书籍,其英文原版名为"Dive Into Python"。这本书以其深入浅出的讲解方式,详细介绍了Python编程语言的各种核心概念、语法特性和实战应用,旨在帮助读者全面理解...

    struts标签的使用(深入潜出).

    Struts标签是Apache Struts框架中用于简化JSP页面开发的组件,它们提供了一种声明式的方式来处理数据展示和交互。Struts标签的使用能够极大地提高开发效率,尤其是在处理MVC模式下的数据传递和展现时。...

    C语言参悟之旅

    本书作者将丰富的开发经验凝聚在方寸之间,以轻松易懂、深入潜出的笔调将C语言的世界描绘得有声有色。

    模拟CMOS集成电路设计.part2

    由模拟集成电路设计界的大师-拉扎维历尽心血编著而成,并由西安交通大学微电子学系的数名教授认真翻译成中文,本书思路清晰严谨,内容翔实丰富,深入潜出,实在是模拟电路设计领域不可多得的良师益友。

    模拟CMOS集成电路设计.part1

    由模拟集成电路设计界的大师-拉扎维历尽心血编著而成,并由西安交通大学微电子学系的数名教授认真翻译成中文,本书思路清晰严谨,内容翔实丰富,深入潜出,实在是模拟电路设计领域不可多得的良师益友。

    浅入深出Vue之组件使用

    组件在 vue开发中是必不可少的一环,用好组件这把屠龙刀,就能解决不少问题。 组件是什么 官方的定义: 组件是可复用的 Vue 实例,并且可带有一个名字。 官方的定义已经非常简明了,组件就是一个实例。...

    中学六年级语文下册 12 伤仲永复习导学案1(无答案) 鲁教版五四制 学案.doc

    本文是中学六年级语文下册的复习导学案,主要针对《伤仲永》这篇课文进行深入学习。《伤仲永》是王安石创作的一篇散文,讲述了方仲永从一个天才儿童逐渐变为普通人的故事,以此阐述了天赋与后天教育的关系。 1. **...

    中考语文课外文言文练习题及答案2精选.doc

    - 夜潜出坐佛膝上,执策映长明灯读之,琅琅达旦:一到夜里,他就暗暗地走出来,坐在佛像的膝盖上,手里拿着书就着佛像前长明灯的灯光诵读,书声琅琅直到天亮。 3. 寓言故事的寓意 - 天下之事皆然,过则非惟无益,...

    优秀资料(2021-2022年收藏)小学六年级文言文阅读.doc

    - “夜潜出坐佛膝上,执策映长明灯读之”:晚上他悄悄出来,坐在佛像的膝盖上,拿着书本借着长明灯的光读书。 8. 成语应用与启示 - 成语“南辕北辙”概括了短文内容,表示行动方向与目标相反。 - 启示:做事要有...

    人教版小学语文课外文言文阅读练习大合集.docx

    + "夜潜出坐佛膝上,执策映长明灯读之":夜里偷偷出来,坐在佛像膝上,拿着蜡烛读书 * 我从本文中感悟到了:这个故事告诉我们,学习是很重要的,即使你是贫者,也可以通过努力学习实现自己的目标。 七、季梁 * ...

    全国名校名卷168套优化重组语文答案.docx

    1. **军事策略**:“规定军士都带着火把登城,派精锐士兵偷偷潜出包围圈外,放火大叫,城上举火把呼应。”这里展示了古代军事战术中的一种常见策略——声东击西,通过制造假象迷惑敌人。 2. **领导风格**:“军士们...

Global site tag (gtag.js) - Google Analytics