Android--四大组件

 

Android四大组件:

  • Activity
  • Service
  • Broadcast
  • ContentProvider

1) Activity:主要用于前台界面的展示和交互

Activity生命周期:

onCreate:一般做View的初始化操作,比如添加View(setContentView,addView等)和View中数据的填充;

onDestroy:一般做一些资源的释放操作,以防止出现资源泄露或者依赖activity所引发的一些异常情况的发生;

onStart、onRestart和onStop

说实话这三个回调接口在实际使用场景中并不多,对onStart、onRestart和onStop的使用可以从是否可见这点来找到它的正确使用姿势。这里举几个常用的场景:

  • 对数据的时效性要求较高。以新闻类App为例:Activity A代表新闻列表,点击列表中的一个Item进入到Activity B新闻详情,在从B返回到A的时候为了保证用户能看到最新的新闻,就需要从服务器拉取最新的新闻列表数据并填充到Activity A,那么这个工作就可以放在onStart里面,当然你也可以放在onRestart里面,但是activity首次加载启动的时候不会调用onRestart,所以也就不会去拉取新闻列表数据。
  • 需要显示动画效果。有些activity需要显示一些动画来帮助提升用户体验,但是当我们从该页面进入到一个新页面时,由于该页面已经不可见了,所以就可以把当前页面中的动画给关掉以节省系统资源,而这个工作就可以放在onStop中进行。

onResume和onPause

这两个接口使用的频率比上一组要高,对onResume和onPause的使用可以从可以从是否获得焦点(焦点即代表是是否可交互)

Activity四种启动模式

Standard

这种启动模式最常见,也是Activity的默认启动模式,每当我们需要开启一个新的Activity页面时系统都会新建一个Activity实例对象,然后开启上面说的Activity的生命周期流程之旅,onCreate->onStart->onResume。

SingleTop

设置该模式后,当通过startActivity启动的Activity与当前Task 栈中最顶部的Activity一样时,系统不会重新创建一个Activity实例,而是进入一个特殊的方法onNewIntent,具体流程为:onNewIntent->onResume。这种场景还是比较多的,比方说商品详情页面一般都会有相关的商品推荐,点击推荐的某个商品后进入的还是一个商品详情页面,这个时候就不需要重新再创建一个新的商品详情Activity页面,直接复用已有的页面,刷新下View中的数据就好了。

SingleTask

设置该模式可以保证当前Task栈中每种Activity只会有一个实例存在,当通过startActivity启动Activity A时,如果当前Task栈中已经存在一个Activity A的实例,那么不再重新创建一个新的Activity实例,而是直接复用该实例,进入该Activity的onNewIntent方法,同时将位于Activity A实例之上的所有Activity弹出Task栈并销毁。这种场景在IM应用中使用的比较多,比如QQ或者微信的聊天页面,当从聊天页面进入其他页面,然后在重新进入聊天页面时就会直接进入原来的聊天页面,同时销毁中间新创建的Activity页面,并刷新聊天页面的数据。

SingleInstance

设置该模式可以保证该Activity所在的Task中有且仅有一个activity实例,当通过startActivity启动Activity A时,如果该Activity的实例已经存在,那么不再重新创建一个新的Activity实例,而是直接复用该实例,进入该Activity的onNewIntent方法。这种场景出现的比较少,该Activity在整个系统只有一个实例,一般用于系统应用,并且可以被其他应用共享使用(有点类似于操作系统概念中的临界资源),比方说来电呼叫页面,在整个系统中就只能有一个,因为同一时刻只能存在一个电话呼叫。

2)Service
  1. 当应用程序不与用户交互时,运行一些需要长时间运行的操作
  2. 为其他应用提供一些功能(提供能够跨进程调用的功能)



3)Broadcase receiver

1、BroadcastReceiver 用于异步接收广播Intent。主要有两大类,用于接收广播的:
  正常广播 Normal broadcasts(用 Context.sendBroadcast()发送)是全然异步的。它们都执行在一个没有定义的顺序,一般是在同一时间。这样会更有效,但意味着receiver不能包括所要使用的结果或中止的API。
  有序广播 Ordered broadcasts(用 Context.sendOrderedBroadcast()发送)每次被发送到一个receiver。所谓有序,就是每一个receiver执行后能够传播到下一个receiver,也能够全然中止传播--不传播给其它receiver。 而receiver执行的顺序能够通过matched intent-filter 里面的android:priority来控制,当priority优先级同样的时候,Receiver以随意的顺序执行。

2、广播接收器是一个专注于接收广播通知信息,并做出相应处理的组件。非常多广播是源自于系统代码的──比方,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也能够进行广播──比方说,通知其他应用程序一些数据下载完毕并处于可用状态。
3、应用程序能够拥有随意数量的广播接收器以对全部它感兴趣的通知信息予以响应。全部的接收器均继承自BroadcastReceiver基类。
4、广播接收器没实用户界面。然而,它们能够启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知能够用非常多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户能够打开它并获取消息。

4)Content provider
ContentProvider(内容提供者)是Android中的四大组件之中的一个。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其它应用訪问,其它应用能够通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自己定义的,系统的也就是比如联系人,图片等数据。
下面这段是Google Doc中对ContentProvider的大致概述。
内容提供者将一些特定的应用程序数据供给其他应用程序使用。数据能够存储于文件系统、SQLite数据库或其他方式。内容提供者继承于ContentProvider 基类,为其他应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。ContentResolver能够与随意内容提供者进行会话,与其合作来对全部相关交互通讯进行管理。
 
 
 
 


转载:https://www.jianshu.com/p/5d614bb67936

 

原文地址:https://www.cnblogs.com/fqfanqi/p/11108937.html