当前位置: 首页>移动开发>正文

android Activity多个栈 安卓activity类

Activity   活动 Android四大组件之一Android 四大组件

  1.Activity活动                 2.Service  服务                 3.BroadCastReceiver 广播接收者                 4.ContentProvider 内容提供者Activity:活动 每个活动都会绑定一个布局文件作为展示的页面                 我们定义的Activity都是 Activity的子类 Activity 活动是 Context的子类Context:上下文对象视图业务逻辑等存在的环境

Activity的创建方式 1.在包右键 new - Activity- EmptyActivity-起个名字即可

 

android Activity多个栈 安卓activity类,android Activity多个栈 安卓activity类_android,第1张

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);

 

android Activity多个栈 安卓activity类,android Activity多个栈 安卓activity类_android Activity多个栈_02,第2张

 结束掉当前的页面  1.在当前的页面调用finish()方法  2.点击Android手机的物理返回键

Activity的生命周期

活动从开始到结束表示过程的方法

 

android Activity多个栈 安卓activity类,android Activity多个栈 安卓activity类_四大组件_03,第3张

一共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"


 只有设置了这两个属性,系统才会为当前的实例创建新的任务,并且放到栈的底部,否则等同于没有设置







https://www.xamrdz.com/mobile/4q71925747.html

相关文章: