Android四大组件
一: Activity
Activity的生命周期
Activity的四种启动模式
(1)Standard 标准模式
Android创建Activity时的默认模式,每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在。
(2)SingleTop 栈顶复用模式
如果要创建的Activity已经处于栈顶时,此时会直接复用栈顶的Activity,不会再创建新的Activity,触发onNewIntent方法;若要创建的Activity不处于栈顶,此时会创建一个新的Activity入栈。
(3)SingleTask 栈内复用模式
若要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。
(4)SingleInstance 单实例模式
全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点,具有此模式的Activity仅仅能单独位于一个任务栈中,这个经常使用于系统中的应用,比如Launch、锁屏键的应用等等,整个系统中仅仅有一个!所以在我们的应用中一般不会用到
二:Service
Service分为两种
(1)Service:
这一种是运行在主线程中的,如果要执行耗时操作,可在service中创建一个异步来执行
(2)IntentService:
这是一种异步服务,是继承于Service的子类,所以推荐当要执行耗时操作时在onHandleIntent方法做操作。
Service的两种启动方式
(1) startService/stopService
注意:api 26 针对启动service做了限制,必须先调用ContextCompat.startForegroundService,然后再Service启动5秒内调用stopForeground,否则会导致闪退。
(2) bindService/unbindService
三:BroadcastReceiver
(1) 广播种类:无序广播与有序广播:
sendBroadcast/sendOrderedBroadcast
(2) 广播形式:本地广播和全局广播:
LocalBroadcastManager/Context
本地广播:广播事件的发送和接收都在本应用,不影响其他应用也不受其他应用影响,只能被动态注册,不能静态注册,主要用法都在LocalBroadcastManager类中;
全局广播: 可以接收其他应用发的广播,也可以发送广播让其他应用接收,全局广播既可以动态注册,也可以静态注册,接受其他应用和系统广播是全局广播的一个重要应用点;
(3) 注册方式:静态注册和动态注册:
AndroidManifest/registerReceiver
静态注册:是常驻型,跟随整个应用程序的生命周期
动态注册:不是常驻型广播,也就是说广播跟随Activity的生命周期。注意在Activity结束前,移除广播接收器
(4) 接收方式:继承BroadcastReceiver,实现onReceive方法
四:ContentProvider
它主要的作用就是将程序的内部的数据和外部进行共享,为数据提供外部访问接口,被访问的数据主要以数据库的形式存在。
例子:
会议问题补充
1、activity 跳转生命周期:
1. 步骤1(打开First Activity):经过onCreate、onStart、onResume后First Activity就展现啦;
2. 步骤2(跳转至Second Activity):首先First Activity暂停(onPause),接下来Second Activity展现(onCreate、onStart、onResume),最后First Activity停止(onStop);
3. 步骤3(返回到First Activity):首先Second Activity暂停(onPause),接下来First Activity重新打开并展现(onRestart、onStart、onResume),最后Second Activity停止并销毁(onStop、onDestroy);
4. 步骤4(退出First Activity):经过onPause、onStop、onDestroy后First Activity暂停、停止并最终销毁。
2、已验证 Service 的onStartCommand 方法可以直接弹起吐司
3、当启动模式设置为 singleTask 时,某些情况下,onActivityResult 会失效
原因参考:https://www.cnblogs.com/wgwyanfs/p/7203899.html
4、dialog弹起需要依赖activity,所以可以理解为属于activity一部分,弹起时不会触发activity的onPause