技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!

   本期门诊特邀Android系统开发专家罗升阳老师,将针对Android应用开发学习过程中遇到的问题给予解答欢迎网友积极提问,与专家一起讨论!

查看本期门诊精彩实录:http://doctor.51cto.com/develop-279.html

精选本期网友提问与专家解答,以供网友学习参考。

【265期门诊集锦】如何全面、深入地掌握Android系统?_第1张图片

Q: 罗老师,你好:想问一下,android基础一点的应用,也懂一点,常用的组件,service,简单的框架,跟着网上的例子,也会写一点。但是,想深入就不知道怎么学习。只学过java。以前没有学习过c、c++和linux,请问下,想深入一点的学习android,该怎么入手,怎么学习linux效果更好一点?
A: 如果你是想学习Android系统开发的话,那还是需要有C/C++和Linux内核基础的,另外Android应用开发也要了解一下,主要就是熟悉一下四大组件的用法。Linux内核有四本书是比较经典的:
1. Linux Kernel Development
2. Understanding the Linux Kernel
3. Linux Device Drivers
4. Linux内核源代码情景分析
 

Q: 前辈您好,我是一名做java web的草根程序员,一直有兴趣想开发安卓游戏,策划都写好了,但真正学习和开发的过程中却不是那么容易。请问安卓应用游戏的开发与其他开发是否有区别,个人开发优秀应用的流程和应该注意哪些问题。谢谢罗老师!

A: 在安桌上开发游戏一般都是在现成的框架上开发的,如Cocos2dx、Unity等,如果你熟悉这些游戏框架的话,相信在安桌上开发游戏是不难的。在移动上开发游戏最需要注意的一个问题是性能,性能不行的话,电池会吃不消的,玩着玩着手机可能就没电了。
 
Q: 你好,我是一名iphone开发人员,涉猎过android开发,我了解android底层开发应用的是linux 和 c,
1.那对于初入android底层开发的人员,最先从哪里入手比较合适或者比较容易?
2.现在在表层应用需要很多创意性的显示和操作控件,供用户使用,为了更好的满足用户的对应用使用的友好度,我们往往需要自定义或者重写一些控件,请问这种做法在某种意义上是否提倡?还是说提倡简约为好,不需要花哨的设计、动作?
3.iphone开发的基础有C/C++,Objective-c,数据结构。android开发的基础除了java,c/c++,xml还需要了解哪些内容?
A:
1. 熟悉C/C++、掌握Linux内核基础以及Android应用开发基础,这三样东西准备好之后,就可以去研究Android的系统代码了。在研究之前,最好先看一下它的HAL层是如何实现以及使用,这样会使你快速地掌握整个Android的架构。
2. 提倡的。移动应用是很强调用户体验的,因此,每个公司的产品都会有自己的风格。如果有自己的一套封装,或者说框架,那么就不单止可以统一自己的产品的风格,还可以加快开发速度。
3. 和前面1的回答一样了。
 
Q: 罗老师,您好,很有缘,咱们同姓。我学android开发快一年了,这一年来都是边写应用边从网上学习,越来越发现,android系统远不是想的那么简单。要掌握并且灵活的开发应用还真不是件容易的事情,比如说比较常用的listview,自定义adapter在每个item后面添加checkbox,可是每次点击一个checkbox为选中状态,后面的部分checkbox也同时勾选上了,遇到这样的问题该怎么解决呢?谢谢!
A: 握手:)。边学边写应用很好,其实碰到问题的时候,首先想到的在网络找答案,Google、Baibu、StackOverflow等,一般来说,你碰到的问题别人也有可能碰到的。如果在网上确实是找不到答案,那就可以跟到系统代码去看看,源代码开放的好处就在这里。配置好环境,把Android系统的源代码下载下来编译好,然后把你的应用放到编译出来的系统里面去调试。
 
Q: 罗老师 你好,现在在一个培训机构学习android 感觉学android的时候和学Java web开发的时候不一样 老师讲了很多感觉记不住 而且老师讲service 还有异步任务以及短点续传的时候 因为以前在Java中没有弄过,感觉好难
A: 我个人是不建议去培训机构的,软件开发很多东西不是靠记的,重点在于理解,以及工程实践。你理解了一个东西,在做工程的时候,如果碰到问题或者有不清楚的地方,可以参考帮助文档,可以在网上找答案。对Android应用开发来讲,重点就是要理解它的应用程序框架层,这方面的知识其实在官方网站上都有很全面的参考的了,所以关键是你要多练。
 
Q: 罗老师,您好,在使用AIDL的时候,感觉像是使用'透明的 ' 代理 ' ,AIDL的底层是怎么实现的,AIDL是怎样的一种机制呢?
A: AIDL其实是一个Binder进程间通信机制的接口描述语言,和COM里面的IDL是类似的。简单来说,AIDL是语言无关的,即不能直接使用。例如,如果要在Java语言里面使用一个由AIDL定义的接口,那么就首先要使用工具来将相应的AIDL文件翻译成Java接口文件。在翻译成Java接口文件的过程中,还会生成相应的Proxy和Stub类,用来封装底层的Binder进程间通信。根据这个原理,不使用AIDL,自己用Java语言来直接编写一个Binder进程间通信接口也是可行的。事实上,在Android系统中,有很多服务接口就是直接用Java语言来编写的,而不是用AIDL来定义。
AIDL文件的解析可以参考这篇文章:http://blog.csdn.net/luoshengyang/article/details/6642463
直接用Java语言来直接编写一个Binder进程间通信接口可以参考这篇文章:http://blog.csdn.net/luoshengyang/article/details/6651971