博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发入门的正确姿势,你get到了吗?
阅读量:4691 次
发布时间:2019-06-09

本文共 2517 字,大约阅读时间需要 8 分钟。

在进行Android开发之前,我们先了解一下Android的生态圈现状。Android系统是开源的,任何手机厂商和开发者都有权限去修改系统源代码,定制专属的系统。

这就产生了一个问题,不同手机厂商之间的ROM可能无法安装在对方厂商的手机上,而每个厂商生产的手机型号又多种多样(硬件配置和屏幕尺寸,而屏幕尺寸又会导致UI的适配性问题),Google将Android权限开放带来的结果就是Android的碎片化问题。先看一下当前Android系统版本的分布情况:

Android 8.0开发者预览版已经发布,在下个月的Google I/O大会上将会正式发布,但Android系统的升级速度与iOS相比实在太慢了,去年发布的7.0至今占有率还不到5%,这主要取决于各个手机厂商对系统的适配升级。

前面提到过手机厂商的手机型号问题,每个厂商的手机型号都会有自己的定位,通过硬件配置和屏幕尺寸来确定每款手机的定位。再看一下屏幕尺寸的分布情况:

对于开发者而言,我们更关注的是屏幕尺寸和系统版本:APP的UI布局需要保证在不同尺寸的屏幕上能够正常显示,不会出现布局错乱的情况;开发过程中需要针对不同系统版本的特性做相应的逻辑适配,比如Android 6.0权限的动态申请等。

用户在使用APP的时候,与用户交互的每一个完整的页面都可以看做是一个场景,而我们的APP也就是由若干个场景组成的。那在Android中,承载这个场景的是什么呢?下面引出Android中的第一个组件:Activity。

Activity可以看作是MVC中的Controller的角色,负责场景UI的加载以及场景的切换。那场景加载的UI从哪里来呢?在开发过程中有两种选择:(1)在代码中去完成UI的布局,目前iOS开发主要就是通过这种方式来布局的;(2)使用xml来完成布局。在Android开发中,更推荐使用第二种方式来完成静态框架的布局,xml布局方式在布局的过程中便可以预览到布局的效果,这种可视化的布局方式也方便来做屏幕的适配。布局的xml文件位于layout目录下,这个目录存放了我们APP中使用的布局文件。通常我们不会针对不同的屏幕做多套布局,而是使用一套布局文件,添加各种约束来适应不同的屏幕。

在APP的某一个场景也就是Activity中,如果希望用户的某些操作能够通知到其它的场景,或者接收系统的一些通知行为,那就需要由广播来实现,这是我们需要介绍的第二个组件——广播。由系统发出的广播,比如收到短信或者电话这类的广播,任何应用都有权限去捕获这类广播,称为系统广播;还有一类广播只针对应用本身发出,用于应用内部传递消息,其它应用没有捕获的权限,这类广播称为本地广播。从安全性角度来说,APP内最好使用本地广播,而且更高效。

如果我们的应用在没有启动的时候也需要接收一些系统事件,比如短信,那我们需要将广播注册成常驻广播,在系统发出相应的广播后,我们注册的BroadcastReceiver会接收到这个广播来进行处理。在收到某些系统广播后,如果我们需要在后台做一些数据上报之类的操作,这些操作不需要用户感知,也不需要UI与用户交互,那我们可以通过Service组件来实现。

Service运行在后台,用户不可见,我们可以将一些耗时的操作放在Service中完成,这里需要注意的是Service是运行在主线程的,如果在Service中需要处理特别耗时的操作,需要开启线程来执行,否则会出现ANR。Activity可以与Service进行关联,即使Activity被销毁后,也可以重新进行关联,获取后台任务的执行状态。

Android中还有一个ContentProvider组件,虽然是四大组件之一,但它的使用频率并没有其它三个那么高。如果你的APP不会提供数据与其它应用交互,并且也不会访问系统的一些数据资源,可能会很少用到这个组件。ContentProvider可以看做是对底层数据的封装,提供了增、删、改、查的操作接口,避免了直接提供数据库权限带来的安全性问题。

一个完整的Android应用会由上述组件中的若干个组成,而组件在使用时必须要先注册,每一个Android应用都由一个AndroidManifest文件,该文件是一个应用的组件注册表,注册了所有在应用中使用到的组件。除了组件之外,应用使用到的权限也必须在该文件中声明。

由于屏幕的尺寸和分辨率比较分散,同一个icon在不同的手机上显示效果也就不同,因此对于图片资源需要针对不同的分辨率做适配。通常设计师只会出一套iOS的资源,包括2x,3x的尺寸,那这些尺寸的资源如何对应到Android上呢?可以直接将2x资源放在xhdpi目录下,3x资源放在xxhdpi目录下,如果对应的目录下没有资源,Android系统会自动根据当前屏幕的分辨率来选择最合适的资源加载,不会出现资源找不到的情况。

简单总结一下:

1、Android应用由四大组件(Activity、Broadcast、Service、ContentProvider)中的若干个组合而成,与用户直接交互的场景由Activity来实现。

2、使用的组件必须在AndroidManifest文件中注册,相应的权限也必须进行声明。

3、布局文件放在layout目录下,布局尽可能的保证控件的约束能够适应不同的屏幕尺寸。

4、资源文件可以复用iOS的资源,2x和3x分别放在xhdpi和xxhdpi目录下。

5、没有了

以上只是简单的介绍了如何从0开始做Android开发时,先有一个整体的了解,并没有涉及到如何去使用这些组件构建Android应用。对于Android开发的初学者,先有一个大概的框架认识,然后再去详细了解每一部分,逐步深入。

参考资料

系统版本的分布和屏幕尺寸的分布由Google提供,会定期做更新,参考链接:

 

原文出自

原文链接https://www.qcloud.com/community/article/935735

转载于:https://www.cnblogs.com/hongge66/p/6804323.html

你可能感兴趣的文章
JS等比例缩小图片尺寸
查看>>
解决Robot Framework运行时没有Log的方案
查看>>
AS3.0实例学习 熟悉新的事件机制和addChild的运用
查看>>
总结的几个cocoapods的几个常见问题
查看>>
「HDU6583 Typewriter」 - 后缀自动机
查看>>
密码框input不允许输入汉字,只可输入数字和字母等
查看>>
【2000*】【Codeforces Round #518 (Div. 1) [Thanks, Mail.Ru!] B】Multihedgehog
查看>>
【9108】模拟数学计算器
查看>>
日留存、周留存、月留存,究竟怎样才能让更多的用户留下来?
查看>>
Handler
查看>>
Redis应用场景
查看>>
非常可乐 HDU1495
查看>>
记录linq.js神器之gorup by 多个字段的方法
查看>>
luogu4360 锯木厂选址 (斜率优化dp)
查看>>
bzoj4571/luogu3293 美味 (主席树+贪心)
查看>>
mysql数据库下载和创建
查看>>
iPhone OS平台:丰富的可能性
查看>>
Codeforces 463D Gargari and Permutations(求k个序列的LCS)
查看>>
Dedecms之SQL语句修改和调用数据总结
查看>>
遍历Panel1中所有label控件的Text
查看>>