超牛链AI Logo

超牛链博客: 读书|骑行|笔记分享
user
老王不响
@关于博主
2014-08-10

Android系统简介(下):运行原理 6 mins read


Android的Application组件包括四大组件,Activity、Service、Broadcast Receiver、Content Provider。这些组件彼此相依,但每个组件有不同的目的,并发挥着特殊作用。在app中使用这些组件可以帮你快速设计应用程序。所有的这些在AndroidManifest.xml文件中定义。

1 Activity:负责前台页面的展示

一个Activity即是UI上的单独的屏幕,对使用者而言。如,如日历的App有一个Activity,用于显示当天的列表。简而言之,一个App即是有若干Activity组合而成。

 

Activity的状态如下图所示:

  • onCreate(): 当activity 被首次创建调用.
  • onStart(): 调用后activity 对用户而言可见
  • onResume(): 用户和activity交互.
  • onPause(): 用户选择切换App会触发该事件
  • onStop(): 调用后activity 对用户而言不可见
  • onDestroy(): 系统消耗activity 则调用此函数
  • onRestart(): 当activity 重新被调用触发
    对App启动、切换App、切换回App、点击返回键四种情况分别用logCat截图:
    App启动

选择其他的App (为什么是2个App我也不清楚)

切换回App

点击返回键

 

2 Service: 负责需要长期运行的任务

Service运行在后台,长期运行,没有UI界面,相对Activity状态很简单,Start或者Stop即可。Activity可启动或停止Service。如,Web浏览器下载的任务。

系统Service不能被停止,否则会导致Android系统不稳定。

3 Broadcast Receiver :广播订阅

该组件的作用是在Android App中订阅系统广播。例如,当照相机完成照片拍照或视频录制。如,电池电量低、无网络等。或者当你在使用APP,这时有电话呼入。广播订阅会通知你发生的广播事件,然后你可用代码处理这些中断。Broadcast

Receiver 组件和Service一样,并没有UI可视界面。在不同的App间你也可以发送你自己的广播消息。

4 Content Provider:内容提供者

在APP和共享数据间,该组件充当中介,如数据存储在设备SD卡、SQLite或者云上。该组件相当于数据库的增、删、改、查行为。如当一个APP需要查询通讯录,则通讯录的Content Provider监听并响应该请求,进行通讯录数据检索并返回给App的Activity。

 

Intents:运行时在不同的组件间的异步消息。简言之,App可用Intents调用其他Application。如,在你的APP中,使用Intents发起Call Phone行为。

综上所述,Android用户在UI上操作的是Activity,Service是一个背景进程,broadcast receiver用于接收广播,content

providers用于存储、接收数据。

———————————————————-

总结:

Android是一个巨大浩瀚的大海,值得探索和学习,且Android操作系统是开源的,尤其适合对编程求甚解的大牛们学习。我个人在工作中并未遇到移动手机开发的需求,但是我认为做软件开发的,有时间写1、2个能在手机上运行的App挺好玩的,至少能扩展软件研发的思路。

2014-08-10
老王 加冕为王
老王,工作了19年的软件工程师、连续创业者、Blogger(since 2013),微软.net MVP获得者(2015~2016)、 Unity3D UVP获得者 (2017)。 曾任上市公司研发主管、知名外企Social Media Marketing 。 现专注于Instagram、SEO等海外社交媒体营销技术研究与实践。 四十而立的我,有2个可爱的宝宝,喜好骑行、读书、木工, 尤其喜好历史、科幻书籍。
友情链接
超牛链 260天前 2024年3月6日 15:16

今天的沙发只给老朋友,等你一起分享

最新文章

一路东北, 转眼二十年

一路东北, 转眼二十年了,最后一次回眸长春,是2004...

人道中年,悲欣交集

中年人的生活 各自欢乐, 又或一地鸡毛,简言之:【悲...

80后爱玩的PC游戏:红警、秦殇 —快乐呀。

记得非典—2003年那会,周末一到,大学宿舍里面,吃完...

超牛链AI:Ollama本地LLM LangChain RAG小试--算力为王

算力为王时代: CPU --> GPU

GPU这...

热门文章

骑行故事初心--自由的御风而行

2023年,三年疫情过后第一个春天,我开始了骑行: 空...

Unity3D for VR 学习(7): 360°全景照片

    在VR应用中,有一个相对简单的虚拟现实体验,那...

C#程序员整理的Unity 3D笔记(六):Git源码管理

对程序员而言,写的代码用源码管理系统管理起来,非常方便...

《一句顶一万句》 遇见一个能说的上话的人不易

2024年 甲辰龙年春节假期,我看了2本小说,茅盾文学...

相关【技术杂谈】文章

查看所有相关【技术杂谈】文章
搭建Squid3 密码账号IP代理

上文中,说明了 Squid3 IP Proxy 隐藏原IP,这里就搭建Squid 3密码账号IP代理进行整理,涉及...

不用插件,js脚本显示星号密码

不用插件,js脚本显示星号密码

以前,我是用Chrome插件做这个这的--显示星号密码的。 今天,分享一个不用插件...

执行MySQL报错

今天新采购了柒比贰WordPress主题,安装主题时候报错: MySQL命令行使用sql语句进行建表时,MySQL...