Android的四大组件有:Activity、Service、Content provider、Broadcast receiver;

一、Activity

(1)一个Activity通常就是一个单独的屏幕(窗口)。

(2)Activity之间通过Intent进行通信。

(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

Activity的生命周期的各种

1、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。
onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。
2、onStart :该方法的触发表示所属活动将被展现给用户。
3、onResume :当一个活动和用户发生交互的时候,触发该方法。
4、onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
5、onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
6、onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
7、onDestroy :当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。
·onSaveInstanceState :系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。
通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。

提到这个状态那就是Activity栈了,和java一样,遵循后进先出的原则

Activity状态
  一般认为Activity有以下四种状态:
  活动的:当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。
  暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。
  当被暂停,一个Activity仍会当成活动状态,只不过是不可以接受用户输入。在极特殊的情况下,Android将会杀死一个暂停的Activity来为活动的Activity提供充足的资源。当一个Activity变为完全隐藏,它将会变成停止。
  停止:当一个Activity不是可视的,它“停止”了。这个Activity将仍然在内存中保存它所有的状态和会员信息。尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。当一个Activity停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个Activity退出或关闭了,它将变为待用状态。
  待用: 在一个Activity被杀死后和被装在前,它是待用状态的。待用Acitivity被移除Activity栈,并且需要在显示和可用之前重新启动它。

二、Service

一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。

Service使用步骤如下

1>继承service类

2>AndroidManifast.xml配置清单文件中<application>节点里对服务进行配置

<service name=".SMSService"/>

Service的启动分两种:context.startService()和context.bindService();

程序通过startService()和stopService()启动和关闭Service时,Service与访问者没有太多关系,因此无法进行通信和数据交换,如果Service和访问者之间需要进行通信,应该调用bindService()绑定Service与访问者,通信结束后,在调用unBindService()解除绑定,退出Service.

生命周期

1. 使用context.startService() 启动Service是会会经历:

  context.startService() ->onCreate()- >onStart()->Service running

  context.stopService() | ->onDestroy() ->Service stop

  如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。

  stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。

  所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy

2. 使用context.bindService()启动Service会经历:

  context.bindService()->onCreate()->onBind()->Service running

  onUnbind() -> onDestroy() ->Service stop

  onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。

  所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。

  在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。


Service通信:本地服务(Local Service)和远程服务(Remote Service)

三. 广播接受者BroadcastReceiver

一个broadcast receiver应该继承BroadcastReceiver,而每一个广播是通过一个Intent对象来传递的。

发送广播:
1.Context.sendBroadcast()发送的广播,所有满足条件的BroadcastReceiver都会执行其onReceiver()方法来处理相应。
2.Context.sendOrderedBroadcast发送的有序广播,会根据BroadcastReceiver注册时IntentFilter的优先级顺序来执行onReceiver()方法,优先

级在<intent-filter>的android:priority中声明,也可以在代码中通过IntentFilter.setPriority()方法设置,数越大优先级别越高。

生命周期

只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(Application No Response) 程序无响应的错误信息

它的生命周期为从回调onReceive()方法开始到该方法返回结果后结束

四. Content Provider内容提供者

1. android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式,其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳)

2. Android系统为这种跨应用的数据交换提供里一个标准,ContentProvider。当用户实现自己的ContentProvider时,需要实现如下抽象方法。

Insert(Uri, ContentValues):向ContentProvider插入数据。

Deleter(Uri,ContentValues):删除ContentProvdier中指定数据。

Update(Uri, ContentValues, String, String[] ):更新ContentProvider中指定数据。

Query(Uri, String[], String, String[], String):从ContentProvider查询数据。

3. ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

它的好处:统一数据访问方式

更多相关文章

  1. ANDROID _EGL
  2. Android电话秀实现(一)
  3. Android弹出框的学习
  4. android api 中文 (75)―― AdapterView.OnItemClickListener
  5. Android——使用网络技术之使用OkHttp
  6. Android(安卓)touch 事件的处理流程
  7. vue中判断是iOS,安卓,以及微信的方法
  8. Android(安卓)退出终止APP的方法总结
  9. react-native之module的使用

随机推荐

  1. 初学Android,短信管理器之发送短信(六十
  2. android 访问WebService
  3. Android(安卓)Activity之间实现数据(对象
  4. Android(安卓)NDK eclipse+cdt+cgywin 环
  5. Android(安卓)Databinding 与 RecyclerVi
  6. eclipse导入android项目后出现错误的解决
  7. Android(安卓)Menu开源项目整合工程
  8. 应用Style和Theme - Android官方文档中文
  9. 如何发布android应用程序
  10. 初学Android,图形图像之使用Path类