Android开发程序员需要知道几件事情?

Android开发程序员需要知道几件事情?,第1张

在成为Android开发程序员的这几年时间内,从一个什么都不懂的菜鸟,成长成为一名资深的Android开发程序员。虽然这一路感触很多很辛苦,但是我依然热爱这个行业。

第一就是技术要扎实

在从事这个行业之前我参加过Android软件开发培训,在北大青鸟学习了一段时间,虽然之前没有接触过,但是在这一段时间内学会了很多的知识。每天学习到很晚,教室里依然有老师的陪伴,这一段时间的学习为我之后的工作,打下了很好的基础。所以无论是在哪个行业,扎实的技术首先是排在第一位的。如果之前在学校里面已经接触过这一块的知识,那么在今后的工作中你也会受到这段时间学习的帮助。

第二你要有计算机思维

在it行业工作肯定是要有计算机思维的,这也是亘古不变的道理。很多时候当事情非常的乱,这时候你需要有计算机思维。它会帮助你快速的解决当前的问题,恢复正常的工作。这个思维要在你的头脑里固化,以后遇到事情就可以快速解决。

第三思维的跳跃性

当你每天都在面对枯燥的代码时,难免会产生负面的情绪。这时你需要思维的跳跃性,缓解当时的情绪,以便更好的工作。在遇到问题时依旧是如此,跳跃的思维会给你带来意想不到的收获。IT培训认为当你一直在坚持这几件事情的时候,你会发现自己已经成为了一名专业的Android开发程序员。

IDC最近一份关于移动应用开发的调查报告显示,Androdid开发者对谷歌的移动 *** 作系统平台的兴趣正在下降。尽管依然有79%的开发者表示对Android“非常感兴趣”,但IDC的调查报告显示,一些迹象表明在2012到2013年间,Android将随着遇到的问题,市场份额会出现大的变化。解决这些问题,对于谷歌如何维持Android生态系统的活力来说意义重大。同样,独立开发者也要意识到这些问题将给自己的商业计划带来困难。

1、Android的碎裂化问题

现如今,用户手中的Android系统版本各异。相信你已经看到过有很多关于开发者如何为最低通用版本编码的文章(现在可能是2.3版本了)。但是,不止在 *** 作系统方面存在Android版本碎裂化这个问题。在SDK开发工具上,也没有统一的标准。你可能要为六种尺寸的屏幕编码,不同的按钮、键盘,有的可能根本就没有按钮好吧,你可以在一个代码分支上为所有的这些设备编码(这种方案即笨拙又不容易实现),或者开发多个版本(听起来就很糟糕)。当然,如果回报还不错的话,这么做也未尝不可,可事实上并非如此。

2、投资的回报

这似乎是既定的法则:Android应用的利润一般都比iOS应用的利润少。这可能是因为人们在买手机时更关注它的功能而不是应用的质量,但是这意味着开发者将获得较少的利润。如果开发者拥有的时间和资源有限,在需要选择平台时,平台已经建立的基础将变得不再重要,他们更关心的将会只是:“我能否赚到钱?”

3、克隆应用的数量

让我们先假设你有一款优秀的应用,它能做一些与众不同的工作,可能是能够联机到社交网络上、处理PIM数据,或者能提供一种新的游戏玩法。然后你有办法让你的应用从成千上万个应用里脱颖而出。但是,接下来就会有数不清的开发者开发出克隆版本,从而拉低你的应用的价格,和你展开竞争。Android商店几乎是一个无法无天的社会。如果不解决这一问题,让开发者面对不公平的竞争,还有多少开发者愿意在里面做应用推广呢?

4、选择哪家商店销售你的应用?

GooglePlay商店、亚马逊的Android商店、BarnesandNoble’sNookApps有很多地方你可以选择用来销售你的应用。这是市场方面的碎裂化问题,而且,有时候它也会让设备型号变得纷乱繁杂。这就意味着要建立更多的版本、协议等等,这些都会是令你头痛的工作。与此相反的是,iOS和Windows手机就没有这么多繁杂的工作要做。

像EA和Ubisoft这样的公司或许可以应付这些问题,但是那些个人开发者是不可能把他们所有的时间都花在应用商店的管理上的。有时候,电脑培训认为当平台已经不再处于快速发展阶段时,开放和免费并不是做好的选择。

1、不要排斥新技术和新工具。

Android Studio 1.0 之后的版本,基本已经稳定到可以支持正常的工作开发的程度了。单纯就书写效率而言,Android Studio 带来的好处绝对大于它和Gradle的学习成本。JetBrains的IDE,用过都说好。

还有就是适当的提升targetSdkVersion到新版本。

2、代码设计方面的问题,大部分都能在Android系统源码里找到解决方案。

当你想设计一个新模块,或者实现一个新ui组件的时候,应该采用哪些设计模式、应该以哪种形式给外界提供接口之类的问题,大部分都可以参考Android系统的源码,找到实现方式。Google为安卓程序员提供了一座现成的宝库。

3、理解Android和Java内存管理方式,至少要理解垃圾回收和Java的引用。

就好比学OC就要先理解黄金法则一样,而java的内存管理,其实比OC要好理解多了。

这可能会帮助你大大减少程序异步 *** 作产生的空指针崩溃。也会帮助你理解为什么滥用单例模式会导致内存的臃肿。还会帮助你养成不用“+”去连接超大字符串的好习惯。

4、ContentProvider并不是只有在跨进程共享数据的才有用,把数据库表映射到一个独立的uri是Google鼓励的实现方式。

从设计上讲,用uri(统一资源标识符)去描述数据,肯定比sql语句要理想。

从效果上讲,用CursorLoader读取数据是让iOS程序员都羡慕不已的事情,作为android程序员,何苦不用呢。

5、理解Activity任务栈。

非Activity的Context对象如果直接启动Activity会报错,这只是一个表面现象,真正起作用的其实是Activity任务栈机制。

理解Activity任务栈机制以及Activity的各种启动方式,会帮助解决大部分页面关系错乱问题,以及应用互相掉起、任务栏进入应用、后台d窗引起的各种问题。

6、对于一些奇葩的第三方ROM,调用其非主流api的时候,可以使用反射。

在适配一些第三方ROM的的时候,调用一些在开发环境中没有,但在运行环境中有的方法时,可以使用反射。比方说,华为双卡手机可能会提供获取第二块SIM卡信息的api,如果直接调用,在开发环境可能无法通过正常编译,用反射就没问题。这属于不得已而用反射的一种情况。

7、SQLite的锁,是数据库级别的锁,也就是说同一个数据库的写 *** 作无法并发执行。

所以,在数据库设计的时候,如果表太多,尽量将没有关联的表拆到多个数据库文件中。

8、Bitmap的内存占用问题。

这是一个困扰2.X时代android程序员的问题。

2.X时代Bitmap对象虽然存储在堆内存中,但是用了一个byte数组存储其像素信息。通过计数器来记录该像素信息被引用的个数。有人认为这个byte数组在native堆中,但事实上它也在堆中。

只有在使用者调用recycle()后,Bitmap对象才会释放像素信息,才会在失去引用后,被垃圾回收机制销毁。再加上DVM的heap size有严格的阀值,所以在使用大量图片资源的时候,及其容易发生OOM。

解决办法一般都是,用一个哈希表存储Bitmap对象的软引用,作为内存缓存,并在适当时机掉用其recycle()。

3.0以上版本Bitmap对象可以通过垃圾回收机制完全销毁,理论上不用再调用recycle()。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12151858.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存