这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
Android 的四大组件有 Activity、Service、Broadcase receiver、Content provider
Activity
Activity是用户和应用的交互窗口,显示控件、视图,并且可以监听用户的事件,做出响应。
1) 生命周期:
onCreate() → onStart() → onResume() → Activity running → onPause() → onStop() → onDestory()
onCreate():Activity被创建的时候调用,一些初始化操作可以在这里完成
onStart():Activity由不可见变为可见的时候调用
onResume():Activity已经可见,并且可以和用户进行交互
onPause():系统准备去启动或者恢复另外Activity的时候调用
onStop():Activity 由可见变为完全不可见
onDestory():Activity 即将被销毁
2) 生命周期遇到的问题:
(1) 用户从A,跳转到B,假设B全部遮挡住了A:
A.onPause() → B.onCreate() → B.onStart() → B.onResume() → A.onStop()
(2) 此时如果点击Back键:
B.onPause() → A.onRestart() → A.onStart() → A.onResume() → B.onStop() → B.onDestory()
(3) 如果按下Back键,系统回到桌面:
A.onPause() → A.onStop() → A.onDestory()
(4) 如果按下Home键,系统返回桌面
A.onPause() → A.onStop()
3) Activity的启动模式
任务栈(Task):Android系统采用栈结构来管理应用程序运行过程中所启动的Activity,即任务栈
Activity的启动模式有四种:standard、singleTop、singleTask、singleInstance
(1) standard:系统默认启动模式,每次启动一个Activity,都会创建一个实例,无论这个实例是否已经被创建
(2) singleTop:如果新Activity位于栈顶,不会重新创建;如果新Activity已经存在但不位于栈顶,仍会创建新的Activity
(3) singleTask:只要Activity在一个栈中存在,多次启动这个Activity都不会重新创建实例,而是将这个Activity上面的Activity全部出栈,直到这个Activity位于栈顶。
(4) singleInstance:要求创建的Activity只能单独位于一个任务栈中,并且这个任务栈中只允许有一个实例存在
(5) Activity常见的Flags
FLAG_ACTIVITY_NEW_TASK:为Activity指定“singleTask”启动模式
FLAG_ACTIVITY_SINGLE_TOP:为Activity指定“singleTop”启动模式
FLAG_ACTIVITY_CLEAR_TOP:有此标志位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。若该Activity为standard启动模式,那么它自身也会出栈,系统会重新创建这个Activity的实例放入栈顶。根据前面的内容可知,singleTask启动模式默认具有此标记位的效果