Android四大组件

一、Activity

Activity是我们Android开发中最常用的组件,提到activity就不得不说说它的生命周期:


Android四大组件_第1张图片

onCreate: 该方法是在Activity被创建时回调,它是生命周期第一个调用的方法,我们在创建Activity时一般都需要重写该方法,然后在该方法中做一些初始化的操作,如通过setContentView设置界面布局的资源,初始化所需要的组件信息等。

onStart: 此方法被回调时表示Activity正在启动,此时Activity已处于可见状态,只是还没有在前台显示,因此无法与用户进行交互。

onResume: 当此方法回调时,则说明Activity已在前台可见,可与用户交互了(处于前面所说的Active/Running形态)。当然从流程图,我们也可以看出当Activity停止后(onPause方法和onStop方法被调用),重新回到前台时也会调用onResume方法,因此我们也可以在onResume方法中初始化一些资源,比如重新初始化在onPause或者onStop方法中释放的资源。

onPause: 此方法被回调时则表示Activity正在停止(Paused形态),一般情况下onStop方法会紧接着被回调。在onPause方法中我们可以做一些数据存储或者动画停止或者资源回收的操作,但是不能太耗时,因为这可能会影响到新的Activity的显示——onPause方法执行完成后,新Activity的onResume方法才会被执行。

onStop: 一般在onPause方法执行完成直接执行,表示Activity即将停止或者完全被覆盖(Stopped形态),此时Activity不可见,仅在后台运行。

onRestart:表示Activity正在重新启动,当Activity由不可见变为可见状态时,该方法被回调。这种情况一般是用户打开了一个新的Activity时,当前的Activity就会被暂停(onPause和onStop被执行了),接着又回到当前Activity页面时,onRestart方法就会被回调。 

onDestroy:此时Activity正在被销毁,也是生命周期最后一个执行的方法,一般我们可以在此方法中做一些回收工作和最终的资源释放。 

二、Service

Service主要用于在后台处理一些耗时操作或者执行一些需要长期运行的任务,我们经常会需要在程序退出之后,还需要保持service运行去处理一些逻辑,常见的就是音乐播放器等等。

Service的启动方式有两种:startService()和bindService();使用startService会分别调用onCreate、onStartCommand、onDestroy,其中onCreate只有在service第一次启动时才会调用,多次启动只会调用onStartCommand一个方法,onDestory只有在service销毁时才会调用。使用startService启动服务,就需要stopService来停止服务,不管启动了多少次service,只需要调用一次stopService就能够停止服务。使用bindService会分别调用onCreate、onBind、onDestory,onBind会返回客户端一个IBind接口实例,这样就能够把调用者和service连接起来了,这个在后面介绍Android IPC机制的时候会详细说明。

注意:onStartCommand需要返回一个int类型,返回值不同代表不同模式:

START_NOT_STICKY

如果系统在onStartCommand()方法返回之后杀死这个服务,那么直到接受到新的Intent对象,这个服务才会被重新创建。这是最安全的选项,用来避免在不需要的时候运行你的服务。

START_STICKY

如果系统在onStartCommand()返回后杀死了这个服务,系统就会重新创建这个服务并且调用onStartCommand()方法,但是它不会重新传递最后的Intent对象,系统会用一个null的Intent对象来调用onStartCommand()方法,在这个情况下,除非有一些被发送的Intent对象在等待启动服务。这适用于不执行命令的媒体播放器(或类似的服务),它只是无限期的运行着并等待工作的到来。

START_REDELIVER_INTENT

如果系统在onStartCommand()方法返回后,系统就会重新创建了这个服务,并且用发送给这个服务的最后的Intent对象调用了onStartCommand()方法。任意等待中的Intent对象会依次被发送。这适用于那些应该立即恢复正在执行的工作的服务,如下载文件。

Service基本上都是在后台运行,其优先级还是比较低,如果系统资源不足,service很可能会被系统自动回收掉。如果需要一直保持service的运行,这个时候就需要创建前台service,通过在service的oncreate方法中调用startForeground方法来创建,前台service会在系统状态栏中显示出来。

三、BroadcasReceiver

BroadcasReceiver就是我们常说的广播接收器,用于接收一些系统广播或者自定义广播,然后进行相应的逻辑处理,比如接收系统启动状态或者时间变化状态,也可以用于接收其他应用程序发送的自定义广播来接收数据。

BroadcasReceiver分为两种:

1、正常广播 Normal broadcasts(用 Context.sendBroadcast()发送)是完全异步的。它们都运行在一个未定义的顺序,通常是在同一时间。这样会更有效,但意味着receiver不能包含所要使用的结果或中止的API。

2、有序广播 Ordered broadcasts(用 Context.sendOrderedBroadcast()发送)每次被发送到一个receiver。所谓有序,就是每个receiver执行后可以传播到下一个receiver,也可以完全中止传播--不传播给其他receiver。 而receiver运行的顺序可以通过matched intent-filter 里面的android:priority来控制,当priority优先级相同的时候,Receiver以任意的顺序运行。

一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。在所调用的onReceive(Context, Intent)函数里,不能有过于耗时的操作,不能使用线程来执行。

BroadcastReceiver 的注册方式有两种,通过AndroidManifest.xml声明方式为静态注册,通过registerReceiver函数为动态注册,静态注册为常驻广播接收器,声明则一直有效,而动态注册的广播接收器生命周期和activity一样,当activity被销毁后,广播接收器也会被销毁。

四、ContentProvider

ContentProvider(内容提供者)主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。

Android开发经常需要做数据存储操作,一般使用files、database和SharedPreferences三种方式,而这些方式都只是针对自身应用的数据,如果需要获取到其他应用的数据,就需要使用到ContentProvider了。

android中提供ContectResolver与ContentProvider来操作别的应用程序的数据。一个应用实现ContentProvider来提供内容给别的应用来操作,一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。使用ContentProvider的时候,我们需要定义一个Uri供其他应用来访问,其实就相当与我们平时使用的网址。Uri分为三部分:

  第一部分是"content://",相当于网址中的"http://"。

  第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它,可以看作是网址中的主机名。

  第三部分是路径名,用来表示将要操作的数据,可以看作网址中细分的内容路径。

你可能感兴趣的:(Android四大组件)