我还用java重载和重写写了个Android版的《欢乐逗地主》,怎么样?

android如何用java socket实现即时通讯? - 知乎121被浏览20671分享邀请回答95 条评论分享收藏感谢收起17 条评论分享收藏感谢收起查看更多回答1 个回答被折叠()&&58687 阅读
郭霖,Android软件开发工程师。从事Android开发工作四年,有着丰富的项目实战经验,负责及参与开发过多款移动应用与游戏,对Android系统架构及应用层开发有着深入的理解。2013年3月开始,在CSDN上发表Android技术相关博文,很快就获得了大量网友的好评。短短一年时间访问量超过50万次,评价近3000条。荣获CSDN认证专家,并被评选为2013年CSDN年度博客之星。2014年,他创作了一书。郭霖现就职于蜗牛移动,继续从事Android开发工作。
问:你是如何成为一位Android开发者的?
也算是机缘巧合吧。之前我走的是Java Web方向,一次偶然的机会了解到了Android操作系统,我觉得移动领域刚刚起步,潜力很大,而且正好又是使用的Java语言,专业和我非常对口,于是我就踏上了这条路。
问:为什么要写《第一行代码——Android》这本书?它能为想要成为Android开发者的读者们解决什么问题?在看你的书之前,需要有什么样的技能和知识做基础?
我很喜欢看书,也看过很多的技术书,写书对于我来说算是一个纪念。至于为什么要写《第一行代码——Android》这本书,我认为基础还是非常重要的,这本书可以很好地帮助Android初学者入门,也可以帮助有经验的Android开发人员巩固基础。
写这本书的时候我是完全站在初学者的角度上来写的,因此只要有Java基础就可以看。对于Java的掌握程度那当然是越熟练越好了,但最低要求是至少要懂Java的基本语法。学习Java的书籍实在是太多了,我也没有都看过,说不上哪本好,大家还是自己找找看吧。
问:关于Android碎片化问题,你对开发者们有什么建议?
碎片化的问题确实让人非常头疼,这是由于Android系统开源的特性所必然导致出现的问题。在这种问题上我不敢说我对开发者们有什么建议,但我自己的做法就是不会为了少部分的用户群而去编写大量的兼容性代码。比如说现在Android 2.x的市场已经非常少了,但有很多的软件还是一定要去兼容这些老版本的系统。我认为这种行为其实在一定程度上纵容了碎片化的产生,也变相导致Android新版本系统普及过于缓慢。当然了,没有提供一种简便升级系统的办法是Android新系统无法迅速普及最主要的原因。碎片化问题即使谷歌都没有办法完全解决掉,我觉得作为一名普通的开发者就没有必要去深入研究了。
问:Android 的后台推送原理是什么?和iOS 相比有什么区别?
后台推送的原理都是相同的,就是让客户端和服务器保持一个长连接,当服务器想要推送的时候,就发送一条消息到指定客户端就可以了。虽说原理相同,但Android的推送要更加复杂一些,因为iOS系统中已经内置好了推送功能,只需要使用提供好的API就能简单地完成推送功能。而Android虽说也提供了类似的GCM服务,但由于在国内使用受到很多限制,所以推送还是要自己做的。不过目前国内也有一些第三方的推送平台,使用它们的话也可以很简单地完成推送功能。
问:对于想要从事移动开发的程序员来说,iOS, Android, WP各有什么优势?哪个未来前景更好?
从开发语言上来讲,Java和C#相对简单,上手成本比较低,这是Android和WP的优势。但iOS目前也推出了Swift语言,很大程度上缓解了OC上手困难的问题。从用户群体上来讲,Android和iOS基本上占据了绝大部分的用户群,WP的用户群体则相对较少。从软件的丰富程度来讲,Android和iOS都拥有绝对的优势,WP短期内并没有赶超的势头。因此,未来的前景我仍然认为Android和iOS会相对较好,WP的发展情况较难预测。
问:一直以来,Android的内部功能相比于iOS都更胜一筹,比如先进的应用内分享机制、自由定制的launcher 和widget,等等,但是iOS 7 特别是 iOS 8 带来的新特性在很大程度上赶上甚至反超 Android,你怎么看?
我从没认为Android系统要比iOS更胜一筹,虽说我自己是从事Android行业的,但我并不希望Android可以干掉iOS。这两个系统各有各的优势,共存是非常合理的现象。至于iOS 7和8推出的新特性我认为是很正常的现象,一个系统要是永远没有创新,那就只能是等死。这条理论同样适用与Android身上,所以Android也在一直进步,比如最近Android L系统的推出,在界面效果上甚至也有赶超iOS的趋势。谷歌和苹果都是伟大的公司,所以我不会片面的评价他们的系统到底谁比谁强。
问:你觉得Android L的最大亮点是什么?对于开发者来说,如何适应多屏开发的趋势?
Android L号称是Android历史上改变最大的一个版本,其中多数功能是系统内部的优化,比如ART运行环境、耗电性优化等。与应用层开发者相关的最主要的改变应该就是Material Design,新的UI,新的控件,给人耳目一新的感觉。
另外,之所以敢称Android L是Android历史上改变最大的一个版本,是因为从这个版本开始,Android系统就不再是仅仅应用于手机和平板上了,而是可以应用在手表、电视和汽车上。Android L中已经建立了Android Wear、Android TV和Android Auto这几个分支,也是为Android日后的多元化铺路吧。至于多屏开发的问题其实是外界人把它想复杂了,Android系统发展到了今天,已经提供了太多不同尺寸屏幕适配的解决方案,相信懂Android开发的朋友们都不会受这个问题困扰的。
问:你认为移动开发人员应该学习用户体验设计吗?如何入手?
所谓技多不压身,如果你有充足的时间和精力,多去学点东西肯定是有好处的。用户体验设计可以在很大程序上帮助开发人员编写出更优秀的程序,能掌握这个本领的话对自身的能力也是有很大提升的。
问:要成为Android开发高手要经过几个阶段?
这种问题我不敢回答,因为我自己也还不是一个高手。但是就我自身的成长经历来说,首先,一定要把Java的基本功打扎实,然后就可以学习Android相关的基础知识了(比如说看《第一行代码》)。接着,可以去尝试编写一些小软件,这样基本就能达到入门水准了。
自己能写出来代码只能算是第一步,接着你还要能读懂别人写的代码,这是很重要的一门功夫,也是要慢慢培养的。等你掌握了这门功夫后,后面的发展方向就非常宽广了,可以阅读你们公司大牛写出的代码,以及各种开源框架甚至是系统的源码,不断充实自己。
问:对于想深入学习底层架构的同学,应该怎样阅读 Android 系统源码呢?
我觉得阅读系统源码非常有必要遵循的一个原则就是抽丝剥茧、点到即止。应该认准一个功能点,然后去分析这个功能点是如何实现的。但只要去追寻主体的实现逻辑即可,千万不要试图去搞懂每一行代码都是什么意思,那样很容易会陷入到思维陷阱当中。因为这些庞大的系统都不是由一个人写出来的,每一行代码都想搞明白,就会感觉自己是在盲人摸象,永远也研究不透。如果只是去分析主体的实现逻辑,那么就有比较明确的目的性,这样阅读源码会更加轻松,也更加有成效。
问:读完《第一行代码》该如何开始下一步的晋级之路?
我觉得基础知识掌握之后,并没有统一的进阶方向,因为你已经拥有了开发很多功能的能力,后面应该根据公司的业务需求去深入研究相关领域的技术,这个就因人而异了。但只要基本功掌握的足够牢固,不管是什么方向的技术,你一定都能势如破竹地拿下的。
更多精彩,加入图灵访谈微信!
《码农》电子刊执行主编,图灵访谈记者
本书是Android初学者的最佳入门书。全书由浅入深、系统全面地讲解了Android软件开发的方方面面。为什么Android应用用Java开发,为什么Android大型游戏要用数据包?这里根据我的知识做一个总结
Android用java作为开发应用程序的语言,是经过深思熟虑的。作为一个开源的、被广泛使用的操作系统,它与微软的Windows系统、苹果的IPhone系统最大的区别,在于硬件差异性而不是别的。
微软的Windows系统,一统天下用的都是X86的CPU体系(即Intel和AMD两家的CPU),所以用C和C++写出的应用程序,只需要编译一次,生成X86
CPU指令的二进制执行文件,就可以在所有硬件配置的Windows系统上跑起来。其实这也是业内公认的一个潜规则,就是微软和Intel的共生关系,微软只使用Intel创立的x86架构体系的芯片(AMD的芯片为了满足这一要求也所有芯片都采用了Intel创立的x86架构),Intel新的PC芯片也都延续x86架构体系。这样做的好处是巨大的:开发者只用开发和编译一次,就可以让应用跑在所有Windows系统上,所有用户只用下同一个应用程序,就基本都能在自己的系统上跑起来。相对而言,下载过塞班手机应用程序的人都有过这种经历:下载应用时要看自己手机的型号,选择对应的才能用。开发塞班程序的人也很痛苦,要为每一种CPU型号的塞班手机都编译一套执行文件,并且没新增一种手机,就要再编译一套。
微软与Intel的这种软硬共生关系,让所有的PC厂商没了选择,只能选择x86架构芯片。有人或许会说他们的这种做法很霸道,但作为应用开发者和用户,却从微软的这种统一性中获取了巨大的方便。
相对于微软的Windows系统而言,Android面临的环境要复杂的多。谷歌是一个以开源免费为主的公司,Android将会被各种设备商所使用,运行在各种架构的CPU上(x86,ARM-7,ARM-9,ARM-11)。这就迫使谷歌不得不面对一个问题:应用开发的难度。如果仍然采用C、C++作为开发语言,那开发Android应用将面临和塞班一样的问题:开发者和使用者都不得不为每一种设备都弄一套程序。这会让开发者痛苦不堪,降低他们的开发效率,也会让习惯了Windows的用户很迷惑和不高兴,为什么我不能下一个通用的程序???在运行效率和开发使用方便性二者之间,谷歌选择了折中,以Java为应用开发语言。Android提供名为Dalvik的Java虚拟机,使Java语言应用运行在这个之上,从而隔离了底层设备的差异性,虽然用解释型语言牺牲了一些效率。
按这个做法,在Android上开发3D游戏的话,直接用Java语言的3D
API就行了,不需要另外再弄什么东西。那为什么Android大型3D游戏还要另外再下数据包,而且数据包还区分CPU(例如给高通CPU的数据包,给TI
CPU的数据包)?这就牵扯到游戏开发商的成本问题。由于游戏开发商希望在大部分设备上只用一套代码,所以基本是C/C++开发的以适应普遍的设备平台,只需为每个平台编译一次。如果再单独为Android开发一套Java代码,显然成本是非常高昂的。于是有了一个间接方法:将C/C++语言编写的核心代码用Android提供的DNK编译成库,再把系统相关的代码用Android
Java开发一下,通过JNI调用C/C++程序编译出的核心库,大功告成,省去了巨额的开发经费。当然也有一些3D游戏,专门为Android写的一套Java代码,不用额外数据包,这样方便了Android用户,但投入-产出是否划算?游戏开发商需要打个算盘了。
最后说苹果IOS系统。它与微软有相似也有不同。不同的是,微软有Intel这样的一个好基友,而苹果似乎在ARM分散和内斗的阵营里难以找到肯与自己长相厮守的伙伴。相似的是,都是闭源系统只给自己使用,并且自家内部使用一个CPU体系(苹果使用的是自己的A系列CPU,微软是x86系列CPU)。不管相同还是不同,最终都促成苹果的自成体系。因为没有忠实硬件伙伴,于是苹果自己开发CPU(本身苹果以前也是做硬件的)。再加上只有自家使用,苹果的IOS王国就与微软帝国一样,拥有了统一的CPU体系。这就使得它与微软一样,应用程序一次编译处处运行。而且由于是编译型语言(object-c)生成的可执行程序,效率比Java要高,这也是为什么IPhone的配置比高端的Android机低却仍然运行很流畅的原因。
最终总结一下,未来的趋势或说开发者和用户的需求,就是应用程序的硬件无关性,一次编译处处运行。而在如何满足这一要求上,有两种途径,一种是一个操作系统采用一致的向下兼容的CPU体系,另一种就是用Java、WebApp这样的平台无关开发方法。如何取舍取决于操作系统提供商本身的特性和市场策略。至于哪种趋势将占主流,在目前的市场格局下尚无法预测。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 java 读写锁 的文章

 

随机推荐