程序员的知识教程库

网站首页 > 教程分享 正文

每日一练之Android的Activity页面

henian88 2025-05-05 15:53:18 教程分享 2 ℃ 0 评论

#### 启停活动页面

- 启动和结束


// 从当前页面跳转到新的页面

startActivity(new Intent(source.this,target.class));

// eg

startService(new Intent(MainActivity.this, FloatingButtonService.class));

// 从当前页面回到上一个页面,相当于关闭当前页面,

finish(); // 结束当前的活动页面

- 生命周期

即状态转换的过程

Activity的七个生命周期方法

- onCreate:创建活动。把页面布局加载进内存,进入初始状态,这个方法会初始化setContentLayout()方法(屏幕绘制),

- onStart:开始活动。把活动页面显示在屏幕上。onCreate()方法完成后,此时activity进入了onStart()方法,当前activity是用户可见状态,但是还不能交互,在此可以做一些动画的初始化操作。

- onResume:恢复活动。onStart()后activity进入onResume方法,当前activity状态属于运行状态,(Running),此时的activity可见可交互。

- onPause:暂停活动。在系统进行另一个activity是调用,此时通常用于确认对于持久性的数据保存更改,动画的停止以及任何其他可能消耗cpu的内容,该方法执行后,下一个Activity才能开始执行,该方法执行后应该执行onStop()方法,

- onStop:停止活动。当Activity对于用户不在可见的时候调用,可能是被另一个Activity覆盖,或者退回到桌面,在onStop方法下系统内存紧张时,有可能会被系统回收,

- onDestory:销毁活动。在Activity被销毁前调用,这是Activity收到的最后调用,当Activity结束或者被系统销毁Activity实例的时候,会被调动该方法,

- onRestart:重启活动。在Activity被停止后再次启动的时候调用,比如从桌面回到应用中时,然后调用onStart方法().

- onNewIntent:重用已有的活动实例。(比较特殊的周期过程)


- 启动模式

Activity实例,以栈的形式进行存储,也就是所谓的任务栈先进后出。

主要有2个基本操作:压栈和出栈,其所存放的Activity是不支持重新排序的,只能根据压栈和出栈操作更改Activity的顺序。启动一个Application的时候,系统会为它默认创建一个对应的Task,用来放置根Activity。默认启动Activity会放在同一个Task中,新启动的Activity会被压入启动它的那个Activity的栈中,并且显示它。当用户按下回退键时,这个Activity就会被弹出栈,按下Home键回到桌面,再启动另一个应用,这时候之前那个Task就被移到后台,成为后台任务栈,而刚启动的那个Task就被调到前台,成为前台任务栈,手机页面显示的就是前台任务栈中的栈顶元素。

- 标准模式(standard)

- 栈顶复用模式(singleTop)

- 栈内复用模式(singleTask)

- 单例模式(singleInstance)

- 启动模式的设置

启动模式有2种设置方式:1、在AndroidMainifest设置、2、通过Intent设置标志位

- 在AndroidMainifest设置

打开AndroidMainifest.xml,给Activity节点添加属性android:launchMode,属性值填入standard表示采取标准模式,默认不添加也是标准模式。

<activity

android:name="com.demo.Main4Activity"

//通过android:launchMode属性设置

android:launchMode="singleTask"/>


- 通过Intent设置标志位

Intent inten = new Intent (ActivityA.this,ActivityB.class);

//通过Intent的Flag设置

// intent.addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);

intent.setFlags(Intent,FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);


代码中的启动标志取值说明

|intent类的启动标志| 说明|

|-----| -----|

|FLAG_ACTIVITY_NEW_TASK |指定启动模式为栈内复用模式(SingleTask)。开辟一个新的任务栈。该值类似于standard;不同之处在于,如果原来不存在活动栈,则会创建一个活动栈|

|FLAG_ACTIVITY_SINGLE_TOP| 指定启动模式为栈顶复用模式(SingleTop)。等同于launchMode="singleTop",当栈顶为待转跳的活动实例时,则重用栈顶的实例|

|FLAG_ACTIVITY_CLEAR_TOP| 所有位于其上层的Activity都要移除,SingleTask模式默认具有此标记效果,但singelTask采用onNewIntent方法启动原任务,而它采用先调用onDestroy再调用onCreate来创建任务。当栈中存在待转跳的活动实例时,则重新创建一个新实例,并清除原实例上方的所有实例。|

|FLAG_ACTIVITY_NO_HISTORY|该标志与standard情况类似,但栈中不保存新的启动的活动实例,下次无论以何种方式再启动该实例,也要走standard模式的完整流程|

|FLAG_ACTIVITY_CLEAR_TASK|该标志非常暴力,转跳到新页面时,栈中的原有实例都被清空,注意该标志需要结合FLAG_ACTIVITY_NEW_TASK使用,即setFlags方法的参数为"FLAG_ACTIVITY_CLEAR_TASK|FLAG_ACTIVITY_NEW_TASK"|

应用实例

- 不来回跳转页面

// 创建一个意图对象,准备跳转到指定的活动页面

Intent intent = new Intent(this,JumpFirstActivity.class);

// 当栈中存在待转跳的活动实例时,则重新创建该活动的实例,并清除原实例上方的所有实例

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // 设置启动标志

startActivity(intent); // 转跳到意图指定的活动页面


- 登录成功后,不再返回登录页面

// 创建一个意图对象,准备跳转到指定的活动页面

Intent intent = new Intent(this,LoginSuccessActivity.class);

// 转跳到新的页面时,栈中的所有实例都被清空,同时开启新任务的活动栈

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); // 设置启动标志

startActivity(intent); // 转跳到意图指定的活动页面

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表