那些你不一定知道的Android知识N系列…


Android的四大组件

  • Activity (活动)
  • Service (服务)
  • Content provider(内容提供器)
  • BroadCast Recevicer(广播)

Activity (活动)

体现

你所看到APP里每个单独的窗口基本上都是Activity。

通信

Activity之间传输数据利用的是Intent组件间通信。

使用

必须在AndroidManifest.xml配置文件中声明,系统才能识别到Activity。


Service (服务)

体现

Service主要用于后台,协助完成应用的指定任务。

使用

  • 必须在AndroidManifest.xml配置文件中以标签声明全部的Service。
  • Service状态分为两种:
  • Service通常位于后台运行,并没有UI界面,Service必须要继承Service基类,Service通常用来提供后台服务和监控其他组件运行状态。

Content provider(内容提供器)

体现

  • Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据,可以理解为应用之间内容交换的中间人
  • 只有在多个应用间需要共享数据的时候,内容提供者才有体现价值。如,通讯录的内容被多个应用获取(QQ、微信、支付宝等),且必须存储在一个内容提供者中。它的好处是统一数据访问方式。
  • ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

使用

  • 开发人员大多数是通过ContentResolver对象实现对ContentProvider的操作,不会直接使用。
  • ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

BroadCast Recevicer(广播)

体现

  • 广播的主要作用是,将应用不感兴趣的外部事件直接过滤掉,打比方,WIFI断开的提醒可以利用广播让你的应用进行接收并响应。
  • 广播虽然没有UI界面,但可以启动一个Activity或Service来响应它收到的消息,或者用NotificationManager来通知用户
  • 通知提醒可以用很多种方法,闪光灯闪烁、震动、播放声音等等,一般来说可以直接在状态栏上放一个明显通知图标,用户就可以打开查看消息了。
  • 广播注册分为两种:

使用

广播接收者的注册有两种方法,分别是动态注册和AndroidManifest文件中进行静态注册


四大组件总结

注册

  • 4个组件基本上都要注册才能使用。
  • Activity、service、Content Provider需要在AndroidManifest文件中进行配置。
  • AndroidManifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不可用。
  • 而broadcast receiver广播接收者的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。
  • 需要注意的是在AndroidManifest文件中进行配置的广播接收者会随系统的启动而一直处于活跃状态,只要接收到感兴趣的广播就会触发(即使程序未运行)。

激活使用

  • 内容提供者的激活:当接收到ContentResolver发出的请求后,内容提供者被激活。
  • activity、服务和广播接收器被一种叫做intent的异步消息所激活。

关闭

  • 内容提供者仅在响应ContentResolver提出请求的时候激活。而一个广播接收器仅在响应广播信息的时候激活。所以,没有必要去显式的关闭这些组件。
  • Activity关闭:可以通过调用它的finish()方法来关闭一个activity。
  • Service关闭:对于通过startService()方法启动的服务要调用Context.stopService()方法关闭服务,使用bindService()方法启动的服务要调用Context.unbindService()方法关闭服务。

额外知识

任务

  • 任务其实就是activity的栈,它由一个或多个Activity组成,共同完成一个完整的用户体验。
  • 栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的Activity,当一个activity启动另外一个的时候,新的activity就被压入栈,并成为当前运行的activity。
  • 而前一个activity仍保持在栈之中。当用户按下BACK键的时候,当前activity出栈,而前一个恢复为当前运行的Activity。
  • 栈中保存的其实是对象,栈中的Activity永远不会重排,只会压入或弹出。
  • 任务中的所有activity是作为一个整体进行移动的。整个的任务(即activity栈)可以移到前台,或退至后台。
  • Android系统是一个多任务(Multi-Task)的操作系统,可以在用手机听音乐的同时,也执行其他多个程序。每多执行一个应用程序,就会多耗费一些系统内存,当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统就会觉得越来越慢,甚至不稳定。
  • 为了解决这个问题,Android引入了一个新的机制,即生命周期(Life Cycle)。

陈皮仔技术专栏:

CSDN:https://blog.csdn.net/Mr_Lester
简书:https://www.jianshu.com/u/2c67d6b3badc
掘金:https://juejin.im/user/5e7423dd5188254935094193/posts
知乎:https://www.zhihu.com/people/chenpizai/posts

关注 “陈皮仔” 公众号,回复关键字"皮友java教程",即可获得无价之宝—>java教程,从此青铜到王者不是梦!


更多相关文章

  1. Android高手应该精通哪些内容
  2. Android开发1――查找所需要出示权限的内容
  3. Android总结篇系列:Android广播机制
  4. 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentP
  5. android 自定义相机 取矩形内内容 注意事项
  6. 【Android】Broadcast广播机制总结
  7. Android文件存取
  8. android 开机启动程序
  9. Android高手应该精通哪些内容?

随机推荐

  1. 使用dumpsys查看android系统服务信息
  2. android 5. callphone and sendsms
  3. android,wince,windows,ios mms 网络电台
  4. android 8.0 开发者选项,默认打开 使用HW
  5. 说说Android桌面(Launcher应用)背后的故
  6. android 软引用和lrucache的区别
  7. android适配器的简单使用
  8. android 2.2 通讯录
  9. Android Studio学习:简单控件:Button控件的
  10. 水平布局linerlayout