在此之前我们了解了一些简单的视图以及布局,那么下面我们就走进Android的四大组件之一Activity 活动:
Activity活动:Android四大组件之一
Android 四大组件:
1.Activity 活动
2.Service 服务
3.BroadCastReceiver 广播接收者
4.ContentProvider 内容提供者
Activity:活动每个活动都会绑定一个布局文件作为展示的页面
我们定义的Activity都是Activity的子类
Activity活动是Context的子类
Context:上下文对象视图业务逻辑等存在的环境
Activity的创建方式:
1.在包右键 new -Activity- EmptyActivity-起个名字即可
2. 在包 右键 new - Javaclass -起个名字并且继承Activity
然后在该类中重写 onCreate方法
在res/layout/创建一个布局文件作为该Activity的绑定布局文件
在类的onCreate方法中添加方法setContentView(R.layout.布局id)
在清单文件中注册:manifest文件中
在<application标签下面添加 <activity标签后添加属性name并将
该类的包名和类名添加进去即可
注意:Activity在创建后必须在清单文件Manifest文件中注册(四大组件在使用的时候都必须注册)
结束掉当前的页面:
1.在当前的页面调用finish()方法
2.点击Android手机的物理返回键
一个Activity有四种状态:
- 运行中(Running/Active):这时Activity位于栈顶,是可见的,并且可以用户交互。
- 暂停(Paused):当Activity失去焦点,不能跟用户交互了,但依然可见,就处于暂停状态。当一个新的非全屏的Activity或者一个透明的Activity放置在栈顶,Activity就处于暂停状态;这个时候Activity的各种数据还被保持着;只有在系统内存在极低的状态下,系统才会自动的去销毁Activity。
- 停止(Stoped):当一个Activity被另一个Activity完全覆盖,或者点击HOME键退入了后台,这时候Activity处于停止状态。这里有些是跟暂停状态相似的:这个时候Activity的各种数据还被保持着;当系统的别的地方需要用到内容时,系统会自动的去销毁Activity。
- 销毁(Detroyed):当我们点击返回键或者系统在内存不够用的情况下就会把Activity从栈里移除销毁,被系统回收,这时候,Activity处于销毁状态。
Activity的生命周期:
活动从开始到结束表示过程的方法
一共7个回调方法(不需要主动调用):
onCreate():
当Activity第一次被创建时调用。是生命周期开始的第一个方法。在这里 我们可以做一些初始化的操作,比如:调用setContentView()方法去加载界 面,绑定布局里的一些控件,初始化一些Activity需要用到的数据。之后 会调用onStart方法.
onStart():
当Activity正在变为可见时调用。这个时候Activity已经可见了,但是还 没有出现在前台还不能跟用户交互。可以简单理解为Actvity已经可见但是 还没有出现在前台。之后会调用onResume
onResume():
当Activity可以跟用户交互时调用,这个时候,这个Activity位于栈的顶 部。跟onStart相比,它们都是表示Activity已经可见,但是onStart调用 时Activity还在后台,而调用onResume时,Activity已经进入了前台,可 以跟用户交互了。之后会调用 onPause.
onPause():
当Activity暂停时调用这个方法;在这里我们可以用来保存数据,关闭动 画和其它比较耗费CPU的操作;但是在这里做的操作绝对不能耗时,因为如 果当前Activity要启动一个新的Activity,这个新的Activity会在当前A ctivity执行完毕onPause之后才能进入可见状态。
onStop():
这个方法是在Activity处于停止状态后,又回到可视状态时调用。之后会 调用onResume
onDestroy():
这个方法是Activity生命周期中调用的最后一个方法。它会在Activity被 销毁之前调用;Activity销毁原因一般是我们调用Activity的finish方法 手动销毁,另一个就是系统在内存紧张的情况下去销毁Activity,以用来节 省空间。我们可以通过方法 isFinishing 来判断Activity是否正在被销毁
正常情况下Activity的生命周期是:
onCreate->onStart->onResume->onPause->onStop->onDestroy
- 对于一个正常的Activity,第一次启动,会依次回调以下方法:
onCreate->onStart->onResume
- 当我们打开一个新的Activity或者点击Home键回到桌面后,会依次回调以下方法:
onPause->onStop。
如果新的Activity是透明的(采用的透明主题),当前的Activity不会回调onStop.
- 当我们再次回到原Activity,会依次回调以下方法:
onRestart->onStart->onResume.
- 当我们点击返回键后,会依次回调以下方法:
onPause->onStop->onDestroy.
- 当Activity被系统回收后,再次被打开,会跟第一次启动的时回调生命周期方法一样
- 我们可以注意到 其中onCreate 跟 onDestroy 是相对的。一个创建一个 销毁。并且其只可能被调用一次。按照这种配对方式,我们也可以 看出 onStart跟onStop 是配对的,一个可见一个不可见.这两个方 法可以被多次调用. 尚onResume 和 onPause 也是配对的,它们 一个获取焦点和用户交互,一个正好相反
- onStart和onResume,onPause和onStop,这两对方法在功描述差不多, 那为什么还要重复存在呢?
其实这两对方法分别代表不同的意义,onStart和onStop 是Activity 是否可见的标志,而onResume和onPause是从Activity是否位于前 台的标志,它们针对的角度不同。
- 在onPause里不能做耗时操作,因为如果要启动一个新的Activity,新的 Activity必须要在前一个Activity的onPause 方法执行完毕之后才会 启动的新的Activity。
常用执行顺序:
1.启动Activity: onCreate、onStart、onResume
2.失去焦点(完全挡住/压入栈底)onPause、onStop
3.锁屏:onPause、onStop
4.重新获取焦点:onRestart、onStart、onResume
5.解锁屏幕:onRestart、onStart、onResume
6.结束Activity:onPause、onStop、onDestroy
Activity启动模式:
1.任务栈:
任务和回退栈
栈: 先进后出
任务: 用于保存当前Activity组件的实例(动作)
回退栈: Activity在内存中保存的数据结构就是会回退栈(管道)
Activity的启动模式表示进栈的方式不同最终效果也不相同:
2.四种启动模式:
1.standard:默认的方式
2.singleTop:
3.singleTask:
4.singleInstance:
一、standard:
默认模式:拿来主义,每一次跳转都会创建一个新的实例。多个Activity启动的时候按照顺序依次执行进栈出栈的行为,哪怕是重复的Activity对象也会创建多个实例放入栈中。
按返回键的时候也会依次的销毁对象,比如:在Activity1跳转到Activity1的时候
也会创建两个Activity1实例放入栈中。
二、singleTop
· (拒绝堆叠) 可以实例化多次,但是栈顶只能出现一个
· 当栈顶不存在要启动的Activity实例,系统会创建一个新的Activity实例;
· 当栈顶存在要启动动的Activity实例, 系统会调用onNewIntent(),把Intent对象传递给已经存在的Activity实例,重用栈顶的Activity
· onNewIntent() 该方法是Activity中的重写方法
三、singleTask
· (独立门户) 只能创建一个Activity实例
· 当栈中不存在要启动的Activity实例, 系统会创建一个Activity实例, 放在栈顶
· 当栈中存在要启动的Activity实例, 会调用已经存在的Activity实例的onNewIntent()方法,
· 把Intent对象传递给已经存在的Activity实例(并不会重新创建实例)
· 并且不允许栈的上方出现其他的Activity实例, 他上方的Activity实例会pop栈中,并且销毁
四、singleInstance
· (孤独寂寞)
· 当使用这种模式启动Activity时,系统会单独分配一个Task,并把这个实例放到栈底.
· 他不允许其他的Activity实例和他共享一个栈
设置方式:
1.在清单文件中Manifest中注册Activity的时候添加标签:
<activityandroid:launchMode= ""/>
参数就是
1.standard:默认的方式
2.singleTop:
3.singleTask:
4.singleInstance:
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout); Log.i("hh","onCreate"); } @Override protected void onStart() { super.onStart(); Log.i("hh","onStart"); } @Override protected void onResume() { super.onResume(); Log.i("hh","onResume"); } @Override protected void onPause() { super.onPause(); Log.i("hh","onPause"); } @Override protected void onStop() { super.onStop(); Log.i("hh","onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("hh","onDestroy"); }写完后按上面的方式一次执行一遍就会对这个Activity的生命周期有一个突破性的认识!