Android四大组件
一、Activity
Activity是一个Android应用程序组件(也称为Android四大组件之一),它提供了一个屏幕,用户可以通过该屏幕进行交互以执行某些操作,例如拨打电话,拍照,发送电子邮件或查看地图。每个活动都有一个窗口,用于绘制其用户界面。
1.Activity的生命周期
onCreate()->onStart()->onResume()->[Activity is running]->onPause()->onStop()->onDestry()
onPause()->onRestart()->onStart()->onResume()->[Activity is running]
如图:
2.Activity的启动模式
(1) standard
标准启动模式;
如果一个Activity的启动模式被设置成standard,那么它可以无限制的创建。你每一次通过Intent去启动这种模式的Activity都会重新创建一个activity。
(2) singleTask
在栈中唯一一个
如果系统中已经存在了该种启动模式的目标Activity,则系统并不会重新创建一个目标Activity,而是首先将持有目标Activity的整个任务栈都会被置于前台(用户可见) 。
(3) singleTop
在栈中最上面的一个
如果在启动这种模式的Activity的时候,当前任务栈的顶端已经存在了相同的Activity,那系统就不会再创建新的,而是回调任务栈中已经存在的该Activity的onNewIntent( )方法。
(4) singleInstance
栈中唯一一个
这种启动模式和singleTask几乎一样,它也只允许系统中存在一个目标Activity,包括上面我们所说的SingleTask的一些特性singleInstance都有。唯一不同的是,持有目标Activity的任务栈中只能有目标Activity一个Actvitiy,不能再有别的Activity,对! 就是承包了这个任务栈。
3.Activity横竖屏切换
(1)不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行1次,切竖屏时会执行1次。
(2)设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
(3)设置Activity的android:configChanges="orientation|keyboardHidden|screenSize"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
(4)设置Activity的android:configChanges="orientation|keyboardHidden|screenSize"时,切屏切记要加上screenSize,否则4.0版本以上生命周期不生效。
4.Fragment生命周期
5.Activity与Fragment生命周期对应
(1)onAttach( ):当Fragment与Activity绑定、关联的时候调用;
(2)onCreateView( ):创建该Fragment对应的视图,并把视图返回给调用者,与onCreate( )的区别是你可以在onCreate( )中初始化与View无关的东西;
(3)onActivityCreated( ):在Activity完成其onCreate()方法后调用;
(4)onDestroyView( ):当Fragment销毁视图的时候调用;
(5)onDetach( ):当Fragment与Activity脱离关系的时候调用;
二、Service
Service是Android的四大组件之一,它是用来进行后台操作的,它并不为用户提供界面,所有的操作都在后台完成,它的所有操作对用户都是不可见的。一旦其他的组件启动了一个Service,它会在后台一直运行,即便是用户切换到了其他的应用中。其他的组件也可以绑定Service进而启动一个Service,甚至可以用它来进行IPC(进程通信,inter process communication). Service可以进行的操作有很多,比如说网络通信,音乐播放,文件的I/O操作,以及和Content Provider进行交互。
1.Service的生命周期
2.Service的2种启动方式
(1)startService()
通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁。
(2)bindService()
1.bindService启动的服务和调用者之间是典型的client-server模式。调用者是client,service则是server端。service只有一个,但绑定到service上面的client可以有一个或很多个。这里所提到的client指的是组件,比如某个Activity。
2.client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这里再通过startService方法启动中是无法实现的。
3.bindService启动服务的生命周期与其绑定的client息息相关。当client销毁时,client会自动与Service解除绑定。当然,client也可以明确调用Context的unbindService()方法与Service解除绑定。当没有任何client与Service绑定时,Service会自行销毁。
3.Service与IntentService的区别
IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方式和启动传统的Service一样,同时,当任务执行完后,IntentService会自动停止,而不需要我们手动去控制或stopSelf()。另外,可以启动IntentService多次,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调方法中执行,并且,每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推。
三、ContentProvider
ContentProvider一般为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。
参考:ContentProvider从入门到精通 (借用大神的)
四、BroadcastReceiver
参考:Android四大组件:BroadcastReceiver史上最全面解析(借用大神的)