Android概念(持续整理)

1、导语  
既然要学习Android,那就得好好摸清Android的一些基本概念问题,不过说实话,作为一位App的开发工程师,你对这些概念不清楚,对于开发App的影响不是非常大,但是我为何还要提呢?因为面试Android工程师的时候,他们就喜欢问这种概念问题,当然实际操作也会问(但是相对问得少,除非你是资深Android工程师),第二,如果你要成为一位资深的Android工程师,那么这种概念问题要非常非常清晰,就说说Android的Activity组件,叫你说说看生命周期,相信有过半年的Android工程师也是说得出来,但是叫你用图纸详细得画出生命周期图,相信就不是那么多人能画出来。
2、Android架构问题
这个问题,几乎每家面试的都有问,其实说实话,这种问题对于App开发的工程师,然后不涉及NDK开发的话,不了解的话也不影响开发。但如果你想成为一位优秀的安卓工程师,那么这种概念性问题得做到说得出来,做得出来的地步。好了废话不多说,概念性问题的话,看这个网址 点击打开链接,我个人感觉讲得比较清晰,而且架构图是中文的偷笑,所以英语不好的同学就不用担心了。说起英语,关于android的一些基本术语一定要讲得出来,而且发音要标准,到时候面试的时候,这给面试官的感觉就是上档次,像说android的四大组件时,必须全英语发音,别serivice说服务,这样显得你太low~ 其实本人英语不咋滴,但是为了这个刻意去背一些计算机术语,而且发音标准!
然后我这里在结合自己的理解,再稍作整合,如有不对,请轻拍砖:
从下往上分别为:Linux内核层,各种库(Libraries)和Android运行环境(Runtime),应用程序框架层(Application Framework),应用程序层(Application)
Linux内核层:面试的时候,我是这么说,这一层主要就是各种驱动程序,蓝牙模块的驱动,Wifi模块的驱动等等(一般不会再往下深入,如果往下深入,看客可以自行百度)
系统库和安卓运行时:系统库就是Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架层为开发者提供服务。安卓运行时,其实就是安卓的运行环境,就是虚拟机技术,这里我不得不再提一下ART技术。在安卓4.4前,虚拟机技术都是Dalvik,但是在之后,Google提出了一个新的虚拟机技术,即ART。之后Android 5.0系统彻底从Dalvik转换到ART,为开发者和用户带来了有史以来最流畅的安卓!两者的虚拟技术区别:ART模式最大的作用就是提升了安卓系统流畅度,相比Dalvik模式中出现的耗电快、占用内存大、即使是旗舰机用久了也会卡顿严重等现象,ART模式中这种问题得到了很好的解决,通过在安装应用程序时,自动对程序进行代码预读取编译,让程序直接编译成机器语言,免去了Dalvik模式要时时转换代码,实现高效率、省电、占用更低的系统内存、手机运行流畅。
应用程序框架层:这一层,安卓App开发者必须要玩得很溜,因为它为应用程序层的开发者提供了API,它实际上是一个应用程序的框架。由于上层的应用程序是以Java构建的,因此本层次提供的首先包含了UI程序中所需要的各种控件,所以安卓开发者这一层要吃得很透。
应用程序层:总算讲这一层了,我们App开发者就是出于这一层,通常用Java语言编写,其中还可以包含各种资源文件(放置在res目录中)、Java程序及相关资源经过编译后,将生成一个APK包。往下我就不深入,因为我觉得大部分Android App开发者对于这层是很熟悉的
3、Android的四大组件以及连接四大组件的桥梁——Intent
面试的时候,这个方向的问题应该是面试必问,而且对于App开发者而言,概念和使用都必须掌握。

作为一个App开发工程师,刚开始学时候我会这么问自己,概念有这么重要吗?学会用就行了,出现问题就百度好了,或者CSDN上提问,刚开始开发出现问题就是百度,CSDN而且都解决了,那会我还是只是会用Activity组件的初学者。但是,渐渐得,除了其它组件我也开始慢慢得用起来,而且出现的问题也越来越稀奇,有些甚至都是百度不到,后来发现都是概念性没掌握,然后找问题跟无头苍蝇一样的,所以概念很重要!

Activity:这个是我刚开始学习android第一个接触的组件,也是四大组件里最重要的一个组件,为什么这么说?因为光靠这个组件,你就可以做出一些简单的app,例如计算器啊,记事本,当然这也只是自己写来玩玩,巩固功底的。接下来就说说它的生命周期,从开始到结束,分别是onCreate,onStart,onRestart,onResume,onPause,onStop,onDestroy,现在附上一张图,网上也是传烂的那张:

接下来我说说这些方法的概念知识(说得比较通俗不官方化,所以最好去看下官方的解释,我是因为觉得这些对于自己对于初学者来说是很用的):

onCreate: 在这里创建界面 ,做一些数据 的初始化工作
onStart: 到这一步变成用户可见不可交互 的

onRestart:activity重新回到前景时调用
onResume: 变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个
Activity的最上面,运行完弹出栈,则回到上一个Activity)
onPause: 到这一步是可见但不可交互 的,系统会停止动画 等消耗CPU 的事情
从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候
你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在
onResume里读出来,注意:这个方法里做的事情时间要短,因为下一
个activity不会等到这个方法完成才启动
onstop: 变得不可见 ,被下一个activity覆盖了
onDestroy: 这是activity被干掉前最后一个被调用方法了

关于这些方法,我想提下onRestart,因为用到的地方不多,所以很多博客会不写或者写错,不过还是很有必要了解的,举个最简单的例子,点击打开链接,这里面讲到了onRestart使用的业务场景,其实你可以自己写个(android sdk大于17)的demo就知道,按Home键字样并不会丢失,这应该是sdk很早的demo,具体是在哪个版本改成这样,各位可以去查查哈~嘿嘿 

其实Activity要讲的东西太多太多,限于篇幅,我就暂时讲到这里,以后开篇章再细讲,主要结合业务场景进行讲解技术,例如activity之间的通信,onsaveinstancestate和onNewIntent方法,onconfigurationchanged方法详解

Service:中文翻译过来就是服务的意思,服务顾名思义,用户是看不到,运行在后台的东西,这样讲其实不太严谨,但差不多就这个意思(别拍砖~)

既然用户客户,那么哪些场景适应呢?大家应该都应该想到了,大家平时听歌,为什么在回到桌面后,还能放歌呢? 这就是Service在起作用

服务按使用范围又分为本地服务,远程服务。

本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。 在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次 stopService()来停止。

远程服务, Remote Service 用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服 务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加 载它。提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。

不过在目前接手的项目中,只用到了本地服务,而且也比较用得比较浅显。我记得是当时的一个项目,需要用到报警处理,即在操作栏弹出一条信息,然后用户点击可以直接跳到我想指定的Activity,其实就是信息推送,但是我自己做的,通过service加socket实现,但是做得很不好,因为这个Serivice会被360,百度卫士等这些系统辅助app在内存清理中时而被杀掉,然后导致推送不过来 

关于如何让自己的服务杀不死,这里的学问蛮深的,我看过一些博客讲解,都是大概了解了思路,玩过几个思路,可惜都失败了

能把这个组件玩得6,那对于app是一件很爽的事情,因为你可以在用户不知道的情况下,干任何事情(有点不道德 啊哈哈),其实用户这种经常碰到,就是安卓桌面莫名其妙得自己装了一些app

看看其生命周期图


其实在真实开发中,大部分App这个组件用得都不多,不过必须得去玩玩,不然就不好吹牛逼~

BroadcastReceiver:广播,在日常生活中就是用来听的,听到这个新闻传闻,我们自己本身就会一系列的反应,例如最近赵薇事件,有相信她的,为她说好话,也有不相信她的,各种喷的,根据人不同,反应也不同  那安卓的广播也一样的,设计来源于生活 哈哈

言归正传,广播在我目前的开发项目中,用到的也是很少,可以说好多项目都是没用到的,但是安卓为何引入这个组件呢?从设计思想角度出发,android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。从设计模式角度出发,起的一种反转控制的作用,类似监听者模式。这是我在网上找到的,我个人觉得讲得比较好的,也许比较难于理解,那么我就举个例子,你有4个Activity——A,B,C,D, 而且他们之间无法通信,而且都没有销毁,这4个Activity都用到了用户信息,例名字,在D这个Activity上修改了名字,那么剩下几个A,B,C这3个Activity相应的UI显示是不是也得刷新呢?但是他们之间又没有之间的通信,那么通过广播就可以了,在D Activity修改名字之后,发送一个change_name的广播,然后A,B,C只要监听了这3个广播,那就动态修改这个用户名字

广播根据发送者分为系统广播和非系统广播

系统广播就是安卓系统自发的广播,最平常的就是电话,短信这些广播,在平时你刷微博的时候,一个电话进来了,为什么画面就跳到电话沟通界面呢?这就是广播的作用

非系统广播就是市面上的App自定义的广播,例如上述的change_name这个广播

content provider:android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

这个组件我是用的最少的,只是玩过demo,然后通过一些第三方库直接集成去写了~ 我举个生活中的例子,做菜,需要用油吧?需要用盐吧?需要酱油吧?然后我们去拿的时候,会根据其形状能分辨出来,但是系统可没有那么高级,它只能通过标示来区分,例如油的瓶子上面会写油字,那系统就知道这是油,这个油类似于这个Uri,通过这个Uri去拿想要的东西

Intent:总算轮到这个组件了,这玩意不得了,没了他,那这4大组件就废了。 它就类似一些机械工具中齿轮,它一旦稍有瑕疵,这个机械工具就无法工作。简单来说,四大组件之间的通信桥梁就是它。

Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙述其所期望的服务或动作、与动作有关的数据等。Android则根据此Intent对象之叙述,负责配对,找出相配的组件,然后将 Intent对象传递给所找到的组件,Android的媒婆任务就完成了。

其实这个很好理解,写开启广播,写开启服务,写开启Actvity,写ContentProvider,你发现都用到了Intent~ 它就是四大组件沟通的媒介

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值