安卓开发心得实例

关键词:

安卓开发心得实例(通用10篇)

篇1:安卓开发心得实例

从4月到6月主要做的工作是网站的开发,而6月到现在208月初,主要做的工作是Android和IOS两种App的开发,又以Android为主。

将这段时间的Android开发心得记录如下。

1.开发环境和参考资料

由于学会__的时间比较短(年7月才学会),现在在用的mac版AndroidStudio是在国内某站上下载的。今年将开发环境由windows转为mac了,好在各种IDE都是跨平台的,迁过来后麻烦不多,Android Studio也贴心地支持Eclipse风格快捷键,使用技巧方面,《Android群英传》的第2章「Android开发工具新接触」讲了些很好的技巧。

同样因为学会__比较晚,主力参考资料一直是手头的几本书籍:可以当词典用的《疯狂Android讲义》,手把手地带新手入门的《第一行代码》,优雅细致地讲Android体系结构的《Android开发精要》,这三本是买的,很喜欢读,另外《Android群英传》《Android UI设计》《打造高质量Android应用》《App研发录》《Android开发艺术探索》买来后翻开的次数较少,感觉对不起它们。这几本其实也都是好书,以后要多看。

学会__之后,Android官网也成了好选择,但不代表书本就没用了。官方资料的优势是正统和条理清晰,但在「最佳实践」甚至「黑科技」上还是一线程序员写的书更接地气。而当想深入理解底层原理、类库的作用时,官网是好选择,而不像书本上的知识会让你有「说得对吗」「没翻译错吧」「没过时吧」的担忧。官网和书本,应当优势互补。具体编程中遇到的各种问题,书本上当然不能穷尽,官网就更不可能了,这时候Google和StackOverflow就有了巨大作用,当然,这也不能解决一切问题,很多时候还是要耐心地慢慢调试。

2.页面知识

这方面《Android开发精要》讲得非常好:安卓的四大组件,被以「任务」的方式组织在一起,「应用边界」和「进程边界」都被打破了。个人感觉,这是学习Android编程时极为重要、应该最早学习到的基础知识。

四大组件中,Activity最重要,它名为「活动」,视为「页面」更容易理解。页面间的关系,以「栈」的方式组织,显示一个新页面即将新页面入栈,总显示栈顶的页面,点击手机上的返回键,则弹出栈顶页面,这些跟浏览器的「前进/后退」按钮的逻辑是一致的,有些时候需要更复杂的控制,例如A打开B,B打开C,希望关闭C时直接返回到A,则应在显示C时将B关掉,栈内元素由ABC变成AC,即可实现目的。

国人用App,习惯了底部标签栏,但官方只有顶部标签栏,所以只好自己实现,Activity中放一个Fragment和一组显示为标签栏的页面元素(具体使用的是RadioGroup,也可以使用别的元素,这不重要),实现当点击标签按钮时,菜单、标签栏、Fragment的样式和逻辑都符合要求即可。Fragment的生命周期和能力,跟Activity几乎一模一样,问题只在于当和另外Activity交互时,接到信息的往往是TabActivity(即Fragment所在的Activity),需要把消息从TabActivity转交给Fragment。菜单的控制也是,点击菜单的消息会到TabActivity手里,要由它转交给具体的Fragment。

Activity和Fragment(下简称页面)中的元素关系,与html的dom类似,是树状的层次,事件也是先由子元素接收,再冒泡到父元素。布局方面,LinearLayout(线性布局)和RelativeLayout(相对布局)最常见,线性布局可以思路清晰地将元素摆在一条直线上,线性布局嵌套,即可先行后列地摆放,类似bootstrap中的row和column,可以嵌套许多层,而RelativeLayout适合用来摆以元素之间的相对位置为核心的页面,在思路上比LinearLayout要复杂一点,但功能强大,布局层次扁平,页面效率高。这两者的关系有点像html中的布局:各种block和inline元素的使用是常规武器,大部分时间好用且省心,但个别时候则需要脱离文档流。

页面中具体的单个元素,则与html的dom中的元素也非常类似,有宽度、高度、margin、padding、背景色、文本色、字号等「样式」属性,因此正如html中可以把样式写在html里,也可以写在css里一样,Android页面的样式也可以拿出来放到style配置文件里,这样能减少重复,便于维护。输入元素中用户输入的内容,当然也能从该元素的属性中读出。响应事件的元素的响应函数注册,也是在该元素上直接声明即可,类似网页中的__.onClick方式。元素和所属页面之间的关系,在页面的onCreate方法中使用findView找到该元素,并设到该页面的成员变量上。页面持有它的元素,元素拥有属性、输入值,并绑定有响应函数,这在任何有界面的编程中都是一致的。

3.数据知识

作为c/s程序,在本地当然有保存数据的能力,包括了键值对保存和数据库保存,这能力连html5后的b/s程序都具有了(5之前只有cookie的方式),Android这些能力的代码都很简单,不多说。

与服务器的交流,rest的交流方式是事实标准,这种交流方式保证了服务端写好rest接口后,开发的Android、IOS甚至Angular这种OPOA的网页程序都能共用这一套接口。rest的编码规范,网上早已有很多了,不多说。Android的HttpClient程序,只要指定url、参数、Get或Post等请求类型,即可发送请求,当服务器给出Http响应之后,Android程序可以从中拿到返回的json字符串,用JSON等库解析为集合或实体(其实json本质无非是map和list两种集合的混搭),然后遍历和取值,自动或手动构造成实体对象,然后改变页面的显示。在要页面显示时,由于Http返回的处理函数运行于另一个线程,直接调用页面的成员变量以试图修改其显示内容会报错。为此需要提早注册一个Handler,用于在接收到消息时读取页面的「数据属性」并改变页面显示,Http返回处理函数将数据更新到页面的「数据属性」中,向Handler发送一个消息,让Handler读取「数据属性」并更新页面即可。

在页面显示数据时,最常用到是ListView,可以定义一个Adapter,实现根据下标返回Item页面元素的方法,方法是声明一个Item布局文件,Adapter持有数据集合,在要实现的方法中使用传入的下标获得单个实体,再使用Item布局文件实例化一个页面元素对象,用实体的属性渲染页面元素对象,将页面元素对象返回即可,推荐使用ViewHolder来提高性能,这在包括《打造高质量Android应用》等书都讲了。

4.实践经验

有了上面1至3的知识,理论上即可完成App的开发,善于将各种编程技能元素组合使用即可(界面知识 + 数据知识 = 一切),但还有些具体工作了才会获得的经验。

在Android Studio中引入第三方库是使用Gradle,类似maven,写配置文件即可。

App上架方面360、百度、腾讯、豌豆荚、小米都成功上线了,华为和PP助手不允许非公司用户上线,没办法。

尝试手动实现定时轮询来获得服务器上的提醒,不成功,但对Service和BroadcastReceiver的理解更深了,Service的主要用途就是保证它打开的线程一直活着,但怎么保证这Service不死?一是设成常驻在通知栏的前台Service,二是在安卓手机「设置」里将该App设为「锁屏后继续运行」,还要将网络设为「锁屏后不断网」,以保证锁屏后线程能继续轮询并从网络上得到最新信息。而BroadcastReceiver的主要作用是,让两个相互之间解耦合得很好的组件可以互相通讯,只需要发起通讯那方指定一个字符串——既不需要访问对象,也不需要指定class类对象,指定一个字符串即可,这时通讯发起方根本不知道会不会有人响应它、会有几个人响应它,零个、一个、多个响应者都有可能,这就是「广播」的意义,可以联系「消息队列」来理解它,主要的目的是解耦。

虽然如此还是常有用户反馈收不到消息推送,只好使用专业的推送服务,目前使用的是「友盟」,文档很好,还提供了编程式发消息的sdk,测试也很友好,调了两天,用户基本能顺利收到推送了,当然还是要在手机设置中将App加入「锁屏后继续运行」的白名单,否则友盟的PushService被杀掉就收不到推送了。另外第三方的「统计」还在摸索。

程序更新提示的实现是在启动时向服务器发一个请求了解最新版本号,与本地程序版本号比对后,如果有更新的,则询问是否要更新。apk包是在Android Studio里签名打包之后,用360加固了之后(否则各平台不允上线),传到了「七牛云存储」的服务器上,在App获取最新版本号时,将最新的apk包的地址一并获取下来,如果用户同意更新,则在后台启动线程下载该apk包,下载完成后自动安装。

App的登录,是将用户名密码提交到服务器,服务器检查正确后返回一个token,App将这token保存在本地,以后请求api时附带用户名和token一起发给服务器,服务器检查用户名和token正确,则将关键的数据返回给App,否则视具体需求返回不完整的数据(未注册用户看到的数据不完整),或者直接返回错误(未注册用户完全不允许访问的数据)。注册时,则是生成一个验证码,将手机号和验证码存到库里,调用发短信的服务商的接口发到用户手机,当用户输入验证码发送请求到服务器,服务器检查手机号和验证码是否匹配,如果匹配,则注册成功。

Android页面中嵌入Html页面很简单,但这两者产生交互的功能还没做过,如果以后做到,再补充进来,这里留个TODO的「抽象方法」占位置。还有图像的延迟加载、数据库的使用,都要留个「TODO」。有时间即实践之。

5.个人感想

「应用程序员」做久了,总是觉得没太多成就感,虽然功能有人用会很开心。但当陷入没什么技术含量的细枝末节,觉得「知道这些东西仅代表有经验,没什么了不起」,就觉得很虚无。安卓的知识,对我来说最有趣的还是体系结构、界面的逻辑、数据的逻辑这三者,当陷入具体的事务,某个api该怎样调,函数有几个该怎样写,甚至最无聊的安卓各版本差异,就算做成功了,也觉得没什么好满足的。

而关于代码质量,在写了这么多年Java的服务器代码,用过市面上几乎所有流行框架,做过无数次封装之后,写这种App的代码,真提不起重构的兴头,「重构的第一原则就是不要重构」,这种思辩,恐怕没几个人辩得过我,因为我对在设计模式、重构、软件工程这些方面的阅读和思考量都非常大,而且逻辑清晰,文采飞扬,曾经而且如今也正在因一些文字被有大名气大影响力的人物欣赏,这些事情久了,就觉得无聊,很多时候人的火气不是来源于别人不认同自己,而是来源于自己不认同自己,当你对自己有了认同,就会觉得别人的发言很无聊,连反驳的兴头都没有,有那工夫,不如真真切切地读两本书,写两行代码。自身修为的提升,总要依赖于这些脚踏实地的努力,而非来源于口舌上的斗争。最重要的是,要知道自己想要的是什么。

篇2:安卓开发心得实例

从.net转行做安卓开发,现在已经过去一年多了。说一下感想和心得体会!

一、开始

说一下我的经厉,从毕业开始出来工作一直是从事.net方向的开发工作。一开始也是没什么经验,加上也没有其他手艺就找了一个.net的开发岗位,刚开始两年都是做一些基本的系统开发OA、CRM什么的。后来跳槽换了几家公司,也都差不多主要是.net web系统开发或者是后台接口的开发。跟着团队一起做项目,完成需求开发,解决bug等等。做了几年看到现在移动互联网是趋势就打算换个方向,本来在我工作的第二年是有一次机会的但是错过了,当时买了mac准备转ios开发的但是刚出来工作基础不好加上没有自制能力所以就没有成功转型。

后来就还是在做.net相关的工作,结果发现做.net的越来越少,加上51上面发现工作岗位远远没有java和Android的多就想着换个方向了,另一个原因是做.net技术一般工资也没提高多少。然后就准备学习Android了

二、Android学习

Android学习是自学的花了两三个月的时间吧,买了几本书,《Android第一行代码》《Android开发艺术》再加上Google的文档和菜鸟教程。刚开始是从一个创意开始,比如想做一个app。下载开发环境,配置开发工具,然后写一个helloworld开始!那时候就是在家自学,做几个例子。跟着网上的教程写一下,因为之前做开发也有一段时间了,java基础还行基本掌握,就从Android开发的ui开始学习,一开始是了解基本的一些ui和_ml怎么写,然后学习如何交互,基本上是把第一行代码里面的例子都敲了一遍。然后就是做一个项目实战一下,比如一个天气应用,刚开始学习的时候也是什么都不会,经常百度,看别人写的代码复制然后改一下,后来发现不行。还是要思考一下原理,然后在家做了一两个app之后觉得差不多了解一点了。

1使用listview 和ReceryView的问题二自定义listview中的东西。

三、找工作

学完Android基础加上做了几个例子程序之后有了一点点信心,就开始写简历了,写的是一年工作经验。然后投简历,找工作的时候已经是6月份了,给我打电话的公司也不多就每天投一下简历,然后看看面试题,想想怎么面试。再就是修改简历。大概找了一个星期左右吧,面试成功了一家公司,是一家外包公司,之前没进过外包加上刚开始也什么经验就去了工资待遇还可以。面试的时候问了一些简单的view基本原理,常用的控件和多线程知识,以及java基础等等。我大概答上来了,自我感觉70分吧。然后把之前公司的一些项目写上去了。之前公司也有移动端的项目,我大概了解一些,只不过当时是负责写后台接口的。就这样就找到了第一份Android的开发工作。当然也有一些不好的地方,比如编造了一些经验。但是不这样的话根本连面试的机会都没有。

四、工作体验

工作也快一年多了吧,刚开始进入公司是负责公司的一个内部系统的Android端的开发工作,根据每一期的需求进行开发。一般一个月到一个半月左右发布一个版本,更新迭代也是很快的,然后一开始是写一些简单的ui界面,调用一下接口。第一个月就是熟悉一下项目,刚好公司有同时和我交接,期间有不懂的也会问问其他同事,经常是问一下ios端的开发。然后因为一些事情项目组的一个同事离职了,我才发现原来招我进来是替代他的,然后Android端的话就只有我一个人了,感觉压力有点大。不过那位同事走之前把项目基本和我介绍了,然后里面系统框架也已经搭建好了,平时的主要工作就是改改界面,根据需求做一下系统的开发,和之前界面的修改。只是因为基础不好,加上经验也不是很足。常常加班,不过进步也是有的。这一年多来基本保证了项目的正常开发上线,虽然有时候会拖延几天。也紧急修改过一下bug。但是对我也是一种锻炼吧。工作总体来说还好,和同事们相处也比较愉快。同时也感谢他们对我的帮助,从别人身上也学到了不少东西,有时候有问题也是一起交流讨论。

工作中的一个技术问题和知识点,自定义View,视频播放,图片加载缓存,获取视频缩略图,复杂界面的布局,以及一些特殊效果的实现。这些问题下一篇文章会详细写出来。

五、总结和感慨

总结

通过这一年左右的工作经历让我对移动端开发有了一个新的认识,Android入门简单但是要想深入学习也需要花一番功夫。同时在这一年的开发工作中,业余还是没有主动学习和提高。对于项目的开发和代码的质量没有更好的要求自己。有时候也应该主动的去学习和思考一下项目中的代码应该怎么写。能不能提高一点,在完成任务的同时还需要对自己要求高一点。刚开始可能工作比较认真,到后来也会发现工作不够热情,对于项目和代码的激情也开始减少,这都是应该思考和反思的 。

感慨

篇3:浅析安卓计算器的开发

1 安卓系统架构

安卓系统架构采用了软件堆栈的架构, 共分为4层, 分别是Linux内核、中间件层、应用程序框架层、以及应用程序层[2]。第一层是Linux内核, 提供由操作系统内核管理的底层基础功能;第二层是中间件层, 由函数库和安卓运行时构成, 安卓函数库和运行时环境包含了一组核心库, 提供了java语言核心库内的大部分功能和Dalvik虚拟机;第三层是安卓应用程序框架层, 提供了安卓平台基本的管理好组件重用机制, 包括Activity管理、窗体管理、包管理、电话管理、资源管理、位置管理、通知消息管理、VIew系统和内容提供者等。第四层是应用程序层, 提供了一系列核心应用程序。

2 开发环境的搭建

安卓的应用开发通常要用到Google提供的Android SDK中的工具集。它包括编译器、资源管理器、调试器和模拟器, 并使用Eclipse加上安卓Developer Tools插件作为集成开发环境。搭建安卓开发环境过程如下:

1) 准备好安装文件, 下载Java JDK、Eclipse、安卓SDK。

2) 安装Java JDK, 安装完成后配置Java环境, 在我的电脑→属性→高级→环境变量→系统变量中添加以下环境变量即可, 需要说明的是设置环境变量对搭建安卓开发环境不是必须的, 可以跳过。安装完成之后, 可以在检查JDK是否安装成功。打开cmd窗口, 输入java-version查看JDK的版本信息;

3) 解压Android SDK, 运行解压包里的SDK Setup.exe, 点击Available Packages。如果没有出现可安装的包, 请点击Settings, 选择希望安装的SDK及其文档或者其它包, 点击Installation Selected、Accept All、Install Accepted, 开始下载安装所选包。在用户变量中新建PATH值为Android SDK中的tools绝对路径。点击“确定”后, 重新启动计算机。重启后, 进入cmd命令窗口, 运行android-h检查SDK是不是安装成功。

4) 解压Eclipse, Eclipse无需安装, 解压后, 直接打开就可运行;然后为Eclipse安装ADT插件, 打开Eclipse, 在菜单栏上选择help→Install New Software, 点击Add按钮, 在Location输入https://dl-ssl.google.com/android/eclipse, 进入下一步, 同意安装条款即可在线安装ADT。

5) 配置安卓SDK, 点击菜单诵window→preference, 点击Browse选择刚才安卓SDK的解压目录, 点击Apply、OK。配置完成。

通过以上5步, 开发环境就配置完成了。也就可以在此基础上开发安卓应用程序了。

需要说明的是, 容易出现ADT和SDK不匹配的情况, 因为我们打开SDK时, 默认是要更新的, 而SDK和ADT并不会同时更新, 所以, 要尤其注意。我们可以把升级后的SDK包压缩好, 打包发给学生, 只需要在电脑里解压到任意位置, 再在Eclipse中配置SDK的路径就可以了。

3 设计与实现

输入模块主要的任务是描述计算器键盘以及实现键盘的监听, 即当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法。

显示模块主要要完成的任务是描述计算器的显示区, 该区域用于显示用户的计算结果可以通过edit Text.set Text () 方法来实现。

计算模块是本次系统设计中的重点, 主要是在src文件夹下的源代码中添加运算过程, 这其中要通过find View By Id方法找到界面中的各个控件。比如找按钮的代码如下:Button button= (Button) find View By Id (R.id.button1) ;为button控件增加一个事件侦听器, button.set On Click Listener (new View.On Click Listener () {@Override...}) ;要注意数据类型的一致性, 比如用Integer.parse Int (edit Text1.get Text () .to String () ) 将字符串类型转化为整型, 用Double.parse Double (s) 将字符串转化为小数等。

系统要能在屏幕上显示出计算器的样子, 就要有整体的布局, 使用户能够看到整个计算器的画面。同时系统想完成计算功能必须要处理用户的输入, 当输入模块的监听传到计算模块中时, 计算模块就要根据相应的方法进行进一步的处理。这部分主要是对输入进行的逻辑判断, 基本会通if else或者switch case来实现逻辑判断。

4 安卓开发的优点和缺点

安卓系统能快速的发展, 当然有其自身的一些优点。

1) 编程语言, 安卓应用是用java语言编写的, 而java程序员的数量很多, 学习曲线也就比较小, 网络上有很多安卓的开源项目供我们学习使用。

2) 安卓系统是开源的, 衍生版本很多, 比如MIUI、OPHONE等, 我国手机厂商的系统大都是基于安卓的衍生版, 这样开发出来的安卓应用程序开源不加修改的在这些众多的衍生版系统中运行。

3) 开发环境和测试工具安卓开发过程利用了极好的JDT工具。每一个Eclipse软件都使用了JDT工具, 这些工具非常好。有关Java的一切都提供了索引, 集成开发环境有丰富的源代码模型, 而且源码处理非常匹配。

任何新生事物都不是完美无瑕的, 安卓也有一些缺点。

1) 安卓的版本太杂, 对旧版本维护不够。

2) 安全问题, 由于安卓的开源和快速发展以及审核机制的不完善导致一些安卓恶意软件的出现, 用户的隐私不能得到充分的保障, 在不经意间就可能泄露自己的隐私。

3) 硬件配置要求比较高, 为了提高程序下次启动时的速度, 安卓不会将用户退出的程序完全关闭, 而是将这些程序存入内存中压缩并缓存, 这就占用了大量的内存空间。

5 总结

安卓手机应用程序开发是一项复杂的工程。该文探讨了安卓的系统架构, Eclipse IDE开发环境的搭建, 以及安卓应用开发的优缺点。并使用Java语言, 设计和开发了基于Eclipse平台的计算器。验证了该平台良好的实用性, 也为广大的安卓爱好者提供一个参考。

参考文献

[1]http://tech.hexun.com/2013-02-18/151208384.html.[2013-2-18].

[2]王向辉, 张国印, 等.安卓应用程序开发 (第二版) [M].北京.清华大学出版社, 2012.

[3]李芙蓉.当前智能手机操作系统及其比较分析[J].信息技术, 2008.

[4]安卓.应用开发揭秘[M].北京:机械工业出版社, 2010.

篇4:安卓开发 舞不完的冰火曲

市场舞台宽广

36万人,这是国内最大Android开发社区——优亿开发社区的注册人数。优亿开发社区就像一个庞大的舞台,供几十万人共同起舞,场面何其壮观及热烈!

起初我们可能还在怀疑:Android是否会很好的存活下去?别的不说,就以完美用户体验为最终目标的苹果为例,在其强大的品牌攻势下,Android开发者能否喘口气都还是个难题。

虽然当时Android的未来还生死未卜,但它毕竟承载了许多人的梦想,开发者们千万般呵护,终于发生了奇迹——“我们发现Android不但能够存活下去,而且活得非常好。”优亿CEO靳岩在4月16日深圳举办的“优亿移动开放日”论坛上的讲话中透露着欣喜,“如果你乘坐公交车或者地铁,一定会发现,人们手里拿着的智能手机,有一半都是Android的系统。”

中文互联网数据研究资讯中心comScore最新发布的2012年2月美国移动用户市场份额报告称,谷歌的Android移动操作系统在一年内持续增长,达到了50.1%。而去年第四季度,Android的产品在中国整体的智能手机的销量占到86.4%,这个数据还一直在增长,预计今年可以占到中国市场的90%以上。塞班系统从以前的80-90%到现在只剩下30%左右,而苹果的系统一直是一个比较封闭的状态,依然在10%左右徘徊。

Android的壮大,中国电信功不可没。“中国电信是第一个提出互联网手机的运营商,也率先帮助中兴、华为这样的公司推出几百块钱的Android手机,推广到三四线城市,让Android的市场占有率迅速壮大。”天翼空间肖毅表示,伴随着中国电信在三四线城市的推广,Android手机必定拥有广阔的发展空间。

难抵开发屏障

台上一分钟,台下十年功。

可移动互联时代,等不得开发者们耗费十年时间苦练内功。“开发者们除了要勤奋和智慧,剩下的恐怕只能是见招拆招了。”靳岩冷静地分析了Android面临的问题,而这些待解决的问题,也的确让人感觉到这个行业目前有点冷。

第一个问题便是Android设备的版本碎裂较严重。“比如,今天在场的人看一下周围拿Android手机的朋友,手机型号肯定不一样。再看的详细一点,其实很多地方都不一样。”靳岩介绍说,“这是因为手机厂商把一些东西给修改掉了。Android的开源性让他们可以修改一些东西,但是修改的时候避免不了要破坏其兼容性,这让Android设备的碎裂化问题非常严重。”

与此同时,同质化依然是Android系统需要面临的一个难题。随着用户对质量的要求越来越高,如何开发出质量较高、留存率较高的应用和更好玩的游戏,也将成为一个具大的挑战。

而在推广方面,靳岩拿Android与苹果做了一个对比:“苹果的推广比较容易,它有一些方法在里面,包括潜规则等。但是Android的推广有一个很大的问题,就是渠道比较分散。现在全国大大小小的推广渠道达到了100个以上,怎么样才能把这100个渠道全都覆盖?我个人认为,那些中小型开发者能够覆盖10个主流渠道就已经很不错了。”

最后一个问题,自然就是回报问题。用户对于免费模式的习惯,或多或少给APP开发者们带来了困惑,而这也直接影响了VC的投资热情。

曲不终舞未散

一切还在进行时。

移动互联为大势所趋,只要背景音乐不断,舞者就不会终止拼搏。所谓的“冷”并没有打击开发者们的热情——Android开发团队变得更加务实,学会了针对市场情况进行冷静地分析,也不再单纯地拼苍白的用户流量,而是开始比拼用户质量。“不去看你的用户活跃还是不活跃,不去想怎么样才能把你的用户转化成你的收入。”一位代表这样发表自己的看法。

在技术上,他们追求更精细化、更人性化。肖毅介绍了自己的API新业务:“比如,通过这个API,可以把单机版的五子棋游戏变成联网的点对点的游戏,或者,把用户的电话号码做一些社交化的分享内容出来。再比如,大家以前做手机的门槛高,适配的难度也非常大,但通过这样一个方式就能让它变得很简单。”

至于推广方面,开发者们不但想到了流量交换的低成本推广方式,更注重将用户体验分享到应用体验中去,建立个性化品牌,从而树立起良好的口碑效应。

篇5:怎么学好安卓开发

现在大学里面和计算机相关的专业甚至理工类专业一般都会开设C语言课程,只是很多同学在大学期间并没有好好学习,如果对它掌握的不太好或者很久没用了,建议先从将其好好复习一下,将其基本的语法再好好回顾一下,最好能搭建一个环境来运行、调试它。如果没有学过,不妨也提前学习一下。大部分的高校所开设的C语言使用的教材都是用它作为教材,因此无论是购买还是借阅,都容易找到。

熟悉数据结构和算法基础知识

如果后续有志于游戏方面的开发,最好具备一定的数据结构和算法基础知识。虽然现代的高级编程语言中,其类库中已经帮我们实现了大部分的数据结构,一般情况下,我们直接使用即可。但如果能对其原理有所了解,当需要在这些数据结构和算法中间的时候,可以更加的清楚到底应该选择哪个数据结构或者算法。另外,在图形图像处理上面,线性代数的作用也非常重要,如果能掌握一点这方面的基础知识,无疑也会在后续的学习中如虎添翼;

熟悉Java基础知识

篇6:安卓开发面试问题

每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。

2、sim卡的`EF 文件有何作用

sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本

身可以有自己的操作系统,EF就是作存储并和手机通讯用的

3、嵌入式操作系统内存管理有哪几种,各有何特性 ?

页式,段式,段页,用到了MMU,虚拟空间等技术

4、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、

航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。

5、一条最长的短信息约占多少byte?

篇7:安卓开发心得实例

虽然安卓智能手机以及平板电脑的运行速度1天比1天快。然而开发者必需记住:APP仍在1种偏资源紧张的环境下运行的,这类环境主要依赖机能与最新的台式机或者笔记本电脑没法比拟的电池以及处理器。下面介绍的1些法子可以匡助开发者实现的利用程序开发的提高,以便现在以及将来的安卓装备上最顺畅地运行。

一、在程序开发的角度上,要确保APP利用程序能够快速响应

通过使用最新的安卓利用开发工具包(SDK)版本、利用编程接口(API)以及最好实践,确保开发者的利用程序是最新的,因此要使用安卓平台提供的最新工具。跟着安卓平台不断发展,它也在不断改良。1些功能可能已经被弃用,或者者换成为了更好的功能。核心API患上到了修正版(bug fix)以及机能改良。已经经引入了装入器等新的API,匡助开发者编写出运行更不乱、响应更迅即的利用程序。明智的开发者都在亲密关注安卓平台的新功能。

二、在发布利用程序以前,禁用或者尽可能少用调试以及诊断

如果开发者在安卓利用开发进程中,花费了大量时间将1些日志以及调试代码嵌入到了利用程序中,要确保在发布利用程序以前,尽可能少用或者完整禁用这些功能。

三、确保设计布局简单、简炼以及浅层

简单的屏幕有助于浏览起来最轻松,而简单的布局装入起来最快速。不应当过于深层地嵌套布局,或者者用没必要要的过量视图(View)控件塞满屏幕。花些时间来开发用户可以高效使用的简炼用户界面,而不是试图把太多功能塞入到单单1个屏幕上。这不仅有助于晋升利用程序的机能,还有助于让APP对于用户来讲更高效。

四、让利用程序的资源合适目标装备

添加合适特定装备配置的资源,那样它们就能尽量高效地装入。咱们在谈论图形资源时,这点尤为首要。如果开发者添加了可应用的庞大图象资源,需要装入以及调剂大小,就没法有效地使用其他的.利用程序资源。此外,如果开发者筹备让APP可以在许多装备上运行,为了让APP软件包文件维持公道的大小,应当最初只添加运行利用程序所需要的核心资源,然后让利用程序下载合适该装备的内容。

五、总结

有许多法子可以匡助安卓利用开发者检测APP的机能。有些需要使用特定的算法,有些依赖切实可行的调试以及机能监测技能。幸亏,安卓平台随带众多免费的实用工具,可以匡助查明以及解除利用程序里面的机能问题。

篇8:基于安卓平台的JAVA开发培训

Android(安卓)系统是手机或一些平板电脑等终端的操作系统,Android系统在不久的将来即将应用在平板电脑,微波炉,电冰箱等等电器上,汇众教育安卓培训专家表示在全世界,包括中国,移动互联网开发的需求不断加大,移动开发人员,如手机java开发、苹果、安卓系统的开发人员的招聘供大于求,许多具备抓实开发基础和实战经验的人才供不应求。

企业所需的安卓工程师从事的是在安卓平台上用JAVA语言进行各种应用软件的开发,包括通话程序,短信程序等。做个简单的比较,JAVA与安卓的关系和C与linux的关系一样,一个是开发语言,一个是操作系统。因此,汇众教育的安卓工程师培养事实上是基于安卓平台的JAVA开发培训。所以有JAVA基础的童鞋们,你们已经走在了时代的前面,在安卓风暴的大潮中,你们是这个时代前进的动力。汇众教育为有JAVA基础的人员,提供免费的一周岗前实训,让JAVA完美的融入到安卓系统的平台上,对于符合要求的人员,汇众免费提供推荐到国家IT龙头企业就业的机会。

篇9:安卓开发心得实例

南昌中兴实习报告

短短的一个月很快就过去了,在南昌中兴软件实训中心的实习就过去了。虽然只有短短的一个月,但我学到了许多知识,熟悉了软件项目开发的流程,也很好的增强了自己的动手能力。在这个月中,我们学习了JAVA的基础知识以及安卓的开发。

我是一名即将大四的学生,用校园里的话来讲就是“奔四”的人。纵观现在的就业形势,国家高校的扩招,世界金融危机的横扫,大学生应该有一种居安思危的紧迫感,特别是对于已经渡过三年的大学的我来说,毕业不是一个遥远的名词,找工作更不是水到渠成的动词了。宝剑锋从磨砺出,梅花香自苦寒来,缺少了平时的锻炼,缺少了厚积当然就不能薄发了。首先我得有思想上的紧迫感,在学校所学都是理论性的知识,社会经验则是乏之又乏。一个综合能力强的人才是这个社会所看好的,“社会需要我干什么我就能干什么”是我个人的奋斗目标。有了强大的精神动力,有了坚如盘石的毅力,相信成功的一天绝不遥远。

首先,我的自学能力得到了加强。在实习的前几天主要进行的是与java有关的知识讲解及其他预备知识的普及。在这之前由于种种原因我没有系统的学过java,所以对于java我几乎一无所知。但是我曾学习过c++,所以对语言的接受与理解速度还不算太慢—尽管老师讲的比较快。但我还是竭尽所能的去跟上老师的节奏。在这个过程中老师曾给我打过一剂预防针---对语法的理解无需太清晰,会用就可以。所以我只需了解大概框架及原理即可。这就教会了我自学的一种

方法---可以在第一遍时不求甚解,先了解知识框架,之后再在使用的过程中不断的加深对知识的理解,从而较快的学会知识并利用之用于实践。

其次我的实际的操作能力得到了加强。知识讲解告一段落之后我们便进入到了紧张而又短暂的项目中。但不得不说刚开始就遇到了一鼻子灰---代码书写总是出错。由于对原理理解的不够透彻,语言使用缺乏足够经验所以进度极慢---尽管任务很少。在经过了多次讨论以及与老师的交流我们渐渐的对项目有了一个较为合理的理解,所以再次投入的过程就比较顺利。在这个过程中我明白实践与理论的差距及二者不可分割的关系。

在张老师讲完java基础后,随着尧老师跟我们讲了安卓的基础开发。

刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及Android提供的APIDEMOS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。

我在为期一个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.

通过半一个月的android实习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程

知识的一次提升。

通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如: 要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。

在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的CurrentActivity这个变量进行控制,进行处理。

在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。

由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。

通过Android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了Android应用程序的开发,以及加深了对Java的认识。

最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电。

篇10:安卓开发心得实例

总结

1、什么是安卓的Broadcast?

安卓的四大组件之一,是一种广泛应用在应用程序之间传输信息的机制。

2、什么是安卓的BroadcastReceiver?

是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播。例如系统的广播有开机广播: 系统在开机时候会发送开机广播,程序接收到之后,能进行开机自启动。网络状态改变广播: 3g变wifi、网络断开等。电量改变广播等等。。

3、Anroid为什么要这样设计?

大大减少开发工作量和开发周期

作为开发者,只需要掌握BroadcastReceiver

4、怎么理解Broadcast和BroadcastReceiver ?

Broadcast就像现实中的广播电台,他发广播信号来,然后我们用收音机来接收,然后处理,并且播放出声音,BroadcastReceiver就相当于那台收音机。

5、使用方法

发送:

把信息装入一个Intent对象(如:Action、Category),通过调相应的方法将Intent对象以广播的方式发送出去: sendBroadcast();

sendOrederBroadcast();sendStickyBroadcast();接收:

当Intent发送之后,所有已经注册receivedBroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceiver()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceiver()方法。注意:

BroadcastReceiver需要注册

静态注册

代码动态注册

6、注意!!

BroadReceiver生命周期只有十秒左右,不能直接执行耗时操作,不然会出现ANR(应用程序无响应),也不能用子线程来做,因为每次广播来的时候都会创建一个Reveiver对象,并且调用onReceiver,执行完之后,对象会立刻被销毁,子线程也没了

要做耗时操作的话,应该通过发送Intent给Service,由Service来完成。

动态注册广播接受者的话要在Destory回调事件进行unregister

7、广播的分类

普通广播(Normal broadcast)所有监听该广播接受者都可以监听到该广播 同级别接收先后顺序是随机的(无序)级别低的后收到广播

接收器不能截断广播的继续传播,也不能处理广播 同级别动态注册高于静态注册 有序广播(Oredered broadcast)按照接收者的优先顺序来接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大优先级越高,可以终止广播的继续传播,接受者可以修改intent的内容。同级别接收顺序是随机的 级别低的后收到

能截断广播的继续传播,高级别的广播接收器接收广播后能决定时候截断。能处理广播

同级别动态注册高于静态注册

异步广播(粘滞性滞留广播)ps:已被弃用

不能处理结果给下一个接收者,无法终止广播。一直存在

可以先发送广播,再注册接收器

需要在清单文件添加android.permission.BROADCAST_STICKY权限

8、Demo

布局actibity_main三个按钮:

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

android:id=“@+id/bt_one”

android:layout_width=“match_parent”

android:layout_height=“50dp”

android:text=“普通广播” />

android:id=“@+id/bt_two”

android:layout_width=“match_parent”

android:layout_height=“50dp”

android:text=“有序Ordered广播” />

android:id=“@+id/bt_three”

android:layout_width=“match_parent”

android:layout_height=“50dp”

android:text=“异步广播Sticky粘滞性滞留广播” />

MainActivity.Java

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private Button btOne;

private Button btTwo;

private Button btThree;

MyReiceiverThree myReiceiver = new MyReiceiverThree();

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btOne =(Button)findViewById(R.id.bt_one);

btTwo =(Button)findViewById(R.id.bt_two);

btThree =(Button)findViewById(R.id.bt_three);

btOne.setOnClickListener(this);

btTwo.setOnClickListener(this);

btThree.setOnClickListener(this);

//动态注册,在当前activity的生命周期內运行

/*IntentFilter filter= new IntentFilter(Config.BC_ONE_ACTION);

MyReiceiver myReiceiver = new MyReiceiver();

registerReceiver(myReiceiver,filter);*/

}

@Override

public void onClick(View view){

Intent intent = new Intent();

switch(view.getId()){

case R.id.bt_one:

//发送普通广播

intent.setAction(Config.BC_ONE_ACTION);

intent.putExtra(“msg”,“这是普通广播”);

sendBroadcast(intent);

break;

case R.id.bt_two:

//有序广播

intent.setAction(Config.BC_TWO_ACTION);

intent.putExtra(“msg”,“这是有序广播”);

sendOrderedBroadcast(intent,null);//其中第二个参数是设置权限,即接收器必须具有相应的权限才能正常接收到广播。

break;

case R.id.bt_three:

//异步广播

intent.setAction(Config.BC_THREE_ACTION);

intent.putExtra(“msg”,“这是异步广播”);

sendStickyBroadcast(intent);

//可以先发送 后注册

IntentFilter filter = new IntentFilter(Config.BC_THREE_ACTION);

registerReceiver(myReiceiver, filter);

break;

}

}

@Override

protected void onDestroy(){

super.onDestroy();

unregisterReceiver(myReiceiver);

} }

MyReceiver.java

public class MyReiceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent){

//获取处理的的广播,普通广播不能获取处理

//true代表如果前面的接收器没有存放数据,则自动创建一个空的Bundle对象,false则表示如果前面的接收器如果没有存放任何数据则返回null。

Bundle bundle= getResultExtras(true);

System.out.println(“接收器1接收到处理的值:”+bundle.getString(“msg”));

System.out.println(“接收器1:”+intent.getStringExtra(“msg”));

} }

MyReceiverTwo.java

public class MyReiceiverTwo extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent){

//Toast.makeText(context,intent.getStringExtra(“msg”),Toast.LENGTH_SHORT).show();

System.out.println(“接收器2:”+intent.getStringExtra(“msg”));

abortBroadcast();

//截断广播,不让别的接收器继续接收,有序广播才能成功拦截

//处理广播

Bundle bundle = new Bundle();

bundle.putString(“msg”,“处理过后的广播”);

setResultExtras(bundle);//

} }

MyReceiverThree.java

public class MyReiceiverThree extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent){

//Toast.makeText(context,intent.getStringExtra(“msg”),Toast.LENGTH_SHORT).show();

System.out.println(“接收器3:”+intent.getStringExtra(“msg”));

} }

Config.java

public class Config {

public static final String BC_ONE_ACTION = “com.example.testbroadcasetwo.bcone”;

public static final String BC_TWO_ACTION = “com.example.testbroadcasetwo.bctwo”;

public static final String BC_THREE_ACTION = “com.example.testbroadcasetwo.bcthree”;}

Androidmanifest.xml

package=“com.example.testbroadcasetwo”>

//异步广播需要 一个权限

android:allowBackup=“true”

android:icon=“@mipmap/ic_launcher”

android:label=“@string/app_name”

android:supportsRtl=“true”

android:theme=“@style/AppTheme”>

String msg = intent.getStringExtra(“msg”);

iShowView =(MainActivity)context;

if(action.equals(Config.BC_ONE)){ //接收到普通广播

iShowView.updateText(msg);

//回调给HandleBroadcast

}

}

public void setiShowView(IShowView iShowView){

this.iShowView = iShowView;

} }

IShowView.java 回调到activity更新ui的接口

public interface IShowView {

void updateText(String msg);}

MainActivity.java

publicclassMainActivityextendsAppCompatActivityimplements View.OnClickListener,IShowView{

private Button btOne;

private TextView mTvResult;

//p层,处理数据

private HandleBroadcast handleBroadcast;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

handleBroadcast = new HandleBroadcast(this,this);

btOne =(Button)findViewById(R.id.bt_one);

mTvResult =(TextView)findViewById(R.id.tv_result);

btOne.setOnClickListener(this);

}

@Override

public void onClick(View view){

switch(view.getId()){

case R.id.bt_one:

handleBroadcast.sendMyBroadcast(TYPE.NORMAL);

break;

}

}

/**

* 广播接收处理完毕之后回调更新ui

* @param msg 要显示的文字

*/

@Override

public void updateText(String msg){

mTvResult.setText(msg);

} }

activity_main.xml

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

android:id=“@+id/bt_one”

android:layout_width=“match_parent”

android:layout_height=“50dp”

android:text=“发送广播”

/>

android:id=“@+id/tv_result”

android:layout_width=“match_parent”

android:layout_height=“60dp”

android:text=“结果”

android:gravity=“center”

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:安卓开发培训 下一篇:安卓总结