- Activity是什么
- Activity的四种状态
- Activity的生命周期
- 进程的优先级
- Activity的任务栈
- Activity启动模式
- scheme跳转协议
Activity 是什么
Activtiy 英文释义是活动的意思,而在 Android 中更多代表手机的屏幕,是 Android 四大组件之一,重要的组成单元,提供了与用户交互的可视化界面(GUI),大多数的 App 都是由多个屏幕组成的。活动你可以理解成一系列的事件的集合,比如说是一场演出。演出会经历开始演出、表演、插播广告、继续表演、结束演出,所以Activity也就有了以下方法:
onCreate,onStart,onResume,onPause, onStop,onDestroy,onRestart构成的生命周期。
如果需要有页面,那很简单,你的 onCreate 方法里面必须要有一句代码:
this.setContentView(R.layout.main);
其中 setContentView 是指我要设定这次演出活动的舞台为 R.layout.main,而R.layout.main 是在你的 res/layout 文件夹由 main.xml 文件定义的,所以你可以像设计html一样在某个xml文件中定义你的舞台(界面),然后通过setContentView表现出来。
如果在xml中定义了某个按钮并给按钮取了一个名字,那么你就可以在你的activity中使用,这是舞台上的演员,演员都有名字,
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
你用 findViewbyId(R.id.btn_login) 找到这个演员,然后让他进行表演。 所以当用户按下这个按钮的时候就会有动作发生。
Activity的四种状态
Activity生命周期一般分为四个基本状态,分别是活动状态(running),暂停状态(paused),停止状态(stopped)和死亡状态(killed)。
1. 活动状态(running)
活动状态一般是指该 Activity 正处于屏幕最显著的位置上显示,即该 Activity 是在 Android 活动栈的最顶端。
一般地当 Activity 创建后就是处于该状态中。
期间触发的函数及顺序为: onCreate() => onStart() => onResume()。
其中:
onCreate() 只有在该 Activity 是第一次被创建时才会被调用,主要是负责 Activity 的一般性的初始化设置,包括视图的创建,数据的绑定等等。需要注意的是若之前有冻结的 state (即系统对该Activity 调用过 onSaveInstanceState() 函数),则可以通过其 Bundle 参数进行state恢复。
onStart() 是当 Activity 正在变为可见状态时才会被调用。一般地在此期间可以注册一个广播等等。
onResume() 是在该Activity将要和用户进行交互时被调用,此时 Activity 位于的活动栈顶部。
2. 暂停状态(paused)
暂停状态一般指该 Activity 已失去了焦点但仍然是可见的状态(包括部分可见)。一个处于暂停状态的 Activity 只有在系统极度缺乏内存资源的情况下才会被系统强制结束。
运行状态到暂停状态所触发的函数及顺序为:onResume() => onPuased()。
暂停状态恢复至运行状态所触发的函数及顺序为:onPuased() => onResume()。
其中:
onPuased() 是当一个 Activity 失去系统焦点后将会被调用,包括见面被部分遮挡,以及设备转入休眠状态等等。一般地在此期间对一些未保存的数据进行持久化并停止其他需要耗费 CPU 的操作,同时不可进行耗时操作,否则会阻塞系统 UI 线程。
3.停止状态(stopped)
停止状态一般指该 Activity 被另一个 Activity 完全覆盖的状态,这是它仍然保持所有的状态,但是由于该 Activity 变得不可见,所以系统经常会由于内存不足而将该 Activity 强行结束。
暂停状态到停止状态所触发的函数及顺序为:onPuased() => onStop()。
停止状态恢复至运行状态所触发的函数及顺序为:onStop() => onRestart() => onStart() => onResume()。
其中:
onStop() 是当一个 Activity 变为不可见时将会被调用,此时可能是由于该 Activity 要被注销或新的 Activity 完全遮挡了该 Activity。在此期间一般可以进行取消注册广播等操作,因为用户不可见。
onRestart() 是当一个Activity从停止状态恢复至运行状态时将会被优先调用。
4.死亡状态(killed)
死亡态是指该 Activity 被系统销毁。当一个 Activity 处于暂停状态或停止状态时就随处可能进入死亡状态,因为系统可能因内存不足而强行结束该 Activity。
停止状态到死亡状态分为两种情况:
(1)由用户操作导致,则执行:onStop() => onDestroy()。
(2)由系统自动强制执行,则该 Activity 被强行结束。
其中:
onDestroy() 是当一个 Activity 正在被系统 finished 期间被调用的。
最后,给大家上个图
Activity的生命周期
- 启动 Activiy:onCreate => onStart() => onResume() , Activity 位于栈顶,进入运行状态。
- 新 Activity 覆盖旧 Activity: onPause() => onStop()(不一定调用),旧Activity的数据被保存起来。
- Activity 不会再显示: onPause() => onStop(),再次回到前台,重新获得焦点:onRestart() => onResume()。
- onStop() 后,可调用 onDestory() 方法销毁该 Activity ,也是该 Activity 最后一次被调用了,可以通过 finish() 关闭 Activity 。
- 当资源不足时,处于 onPause() 的 Activity 可能会被杀死。
注意:以上方法都是回调方法,我们只能重写其中的方法,不能调用,具体什么时候调用,是系统来决定的,我们只能手动调用 finish() 关闭某个 Activity。
onCreate()
在每个 Activity 中我们都重写了这个方法,onCreate 方法会在 Activity 第一次被创建时调用。 我们应该在这个方法中完成活动的初始化操作, 比如说加载布局、初始化布局控件、绑定事件等。
onStart()
这个方法在 Activity 由不可见变为可见的时候调用。
onResume()
这个方法在 Activity 准备好和用户进行交互的时候调用。 此时的 Activity 一定位于返回栈的栈顶,并且处于运行状态。
onPause()
这个方法在系统准备去启动或者恢复另一个活动的时候调用。 我们通常会在这个方法中将一些及其消耗 CPU 的资源释放掉(比如显示地图或者大规模图形),以及保存一些关键数据(比如用户输入的数据等等),但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
onStop()
这个方法在 Activity 完全不可见的时候调用。它和 onPause() 方法的主要区别在于,如果启动的新 Activity 是一个对话框式的 Activity ,那么 onPause() 方法会得到执行,而 onStop() 方法并不会执行。
onDestroy()
这个方法在 Activity 被销毁之前调用,之后 Activity 的状态将变为销毁状态。
onRestart()
这个方法在 Activity 由停止状态变为运行状态之前调用,也就是 Activity 被重新启动了。
上面的几种方法除了 onRestart() 以外,都两两相对,我们又可以分为三个时期。
完整生存期
Activity 在 onCreate() 方法和 onDestroy() 方法之间所经历的,就是完整生存期。一般情况下,一个Activity 会在 onCreate() 方法中完成各种初始化操作,而在 onDestroy() 方法中完成释放内存的操作。
可见生存期
Activity 在 onStart() 方法和 onStop() 方法之间所经历的,就是可见生存期。在可见生存期内, Activity 对于用户总是可见的, 即便有可能无法和用户进行交互。 我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在 onStart() 方法中对资源进行加载,而在 onStop() 方法中对资源进行释放, 从而保证处于停止状态的 Activity 不会占用过多内存。
前台生存期
Activity 在 onResume() 方法和 onPause() 方法之间所经历的,就是前台生存期。在前台生存期内, Activity 总是处于运行状态的, 此时的 Activity 是可以和用户进行相互的, 我们平时看到和接触最多的也这个状态下的 Activity 。