Activity 活动: Android四大组件之一Android 四大组件:
1.Activity活动 2.Service 服务 3.BroadCastReceiver 广播接收者 4.ContentProvider 内容提供者Activity:活动 每个活动都会绑定一个布局文件作为展示的页面 我们定义的Activity都是 Activity的子类 Activity 活动是 Context的子类Context:上下文对象视图业务逻辑等存在的环境
Activity的创建方式: 1.在包右键 new - Activity- EmptyActivity-起个名字即可
2.在包 右键new - Java class -起个名字并且继承Activity
然后在该类中重写 onCreate方法 在res/layout/创建一个布局文件作为该Activity的绑定布局文件 在类的onCreate方法中 添加方法 setContentView(R.layout.布局id) 在清单文件中注册: manifest文件中 在<application标签下面添加 <activity标签后添加属性name并将 该类的包名和类名添加进去即可
相对较为麻烦 不推荐使用
注意:Activity在创建后必须在清单文件Manifest文件中注册(四大组件在使用的时候都必须注册)
在注册时候时候如果当前的Activity添加了 <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>则表示该Activity的页面是启动页面
页面之间的切换: Intent类: Intent:意图 连接四大组件的枢纽 用于启动四大组件 传递数据等等操作
实例化对象: 参数一:表示当前的上下文对象 参数二: 表示目标Activity的类对象 SecondActivity.class
Intent intent= new Intent(this,Activity.class); 开启跳转: 参数 intent
startActivity(intent);
结束掉当前的页面: 1.在当前的页面调用finish()方法 2.点击Android手机的物理返回键
Activity的生命周期:
活动从开始到结束表示过程的方法
一共7个回调方法(不需要主动调用):
onCreate():活动第一次被创建,一般用于初始化,例如加载布局,绑定事件,获取组件的引用等.
onStart():由不可见变为可见时调用.
onResume()[rɪ'zjuːm]:在活动准备好和用户进行交互的时候调用.此时活动处于栈顶,并处于运行状态.
onPause():在系统准备去启动或恢复另一个活动的时候调用.通常在其中将一些消耗CPU的资源释放掉,例如广播收音者,传感器手柄(像GPS),或是任何可能影响电池寿命的资源。以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到栈顶活动的使用(即新页面无法入栈).
onStop():在活动完全不可见的时候调用.耗时的操作可以在这个方法执行。
onRestart():处于"Stopped停止状态"的活动被重新显示时会自动执行本方法,之后再执行onStart(),onResume().使活动可见可交互。
onDestroy():在销毁之前自动调用.
常用执行顺序:
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销毁了但是 onDestroy方法没有执行:
在应用程序里按下手机的Home键,然后按下任务栏,在手机任务栏里直接清空任务的时候 Activity会被销毁但是没有执行onDestory方法
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的时候 添加标签:
<activity android:launchMode= ""/>
参数就是
1.standard:默认的方式
2.singleTop:
3.singleTask:
4.singleInstance:
2.在Java 代码中设置:
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Intent.FLAG_ACTIVITY_SINGLE_TOP 等同于singleTop
Intent.FLAG_ACTIVITY_CLEAR_TOP
同singleTask相似,当栈中不存在创建; 如果存在把自己和上方的所有Activity实例移除栈中,并且销毁, 创建一个新的实例,放在栈顶
Intent.FLAG_ACTIVITY_NEW_TASK
必须要在Activity注册时加上属性
android:taskAffinity="com.other"
android:alwaysRetainTaskState="true"
只有设置了这两个属性,系统才会为当前的实例创建新的任务,并且放到栈的底部,否则等同于没有设置