Activity详解
程序员文章站
2022-03-25 08:13:24
一、Activity介绍Activity是Android的四大组件之一,它提供屏幕,用户通过它与机器产生交互。二、Activity的生命周期onresume 与 onstart 的区别onStart 用户可见,但还没有获得焦点,用户还不能进行操作。onResume 界面可见,并获得焦点,用户可以进行操作了。Activity A 启动 Activity B 时的操作打印Activity_A onPause()......Activity_B onCreate()...........
一、Activity介绍
Activity是Android的四大组件之一,它提供屏幕,用户通过它与机器产生交互。
二、Activity的生命周期
onresume 与 onstart 的区别
onStart 用户可见,但还没有获得焦点,用户还不能进行操作。
onResume 界面可见,并获得焦点,用户可以进行操作了。
Activity A 启动 Activity B 时的操作打印
Activity_A onPause()......
Activity_B onCreate()...... Activity_B onStart()...... Activity_B onResume()......
Activity_A onStop()......
三、保存 Activity 状态
- Activity 处于 paused, stopped 时依然存在内存中,所有的数据及状态都存在,因此当被恢复时依然保持退出时的状态。
- 但处于 paused, stopped 状态的 Activity 可能会被系统杀掉,从而用户重新打开时,与当时提出时不一样了。为了保证能够还原现场,则需要实现 onSaveInstanceState() 回调方法。
- 系统在 Activity 被销毁之前调用 onSaveInstance() ,通过将需要记住的状态通过键值对的形式保存到 Bundle 参数中。当应用程序被系统杀死,并再次被启动时,会将保存的 Bundle 传递到 onCreate() 和 onRestoreInstanceState() 。从这些方法的 Bundle 参数中,就可以获取到 Activity 被销毁前的状态,并据此恢复 Activity。
四、Activity 的启动模式
静态设置启动模式
在Manifest中设置的(通过launchMode属性设置),这个被称为静态设置。
- standard 默认启动模式,会默认创建一个新的实例,因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
- singleTop 栈顶复用模式,可以有多个实例,但是不允许多个相同Activity叠加。如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。应用场景:开启渠道多,适合多应用开启调用的Activity。
- singleTask 栈内复用模式,只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。应用场景:程序主界面,我们肯定不希望主界面被多创建,而且在主界面退出的时候退出整个App是最好的设想。
- singleInstance 全局唯一模式,会为目标Activity分配一个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得焦点。新的Task有且只有这一个Activity实例。如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒
动态设置启动模式
动态在java代码设置,如果同时有动态和静态设置,那么动态的优先级更高。
- FLAG_ACTIVITY_SINGLE_TOP 与静态设置中的singleTop效果相同
- FLAG_ACTIVITY_CLEAR_TOP 与singleTask很像,不同的是此flag会销毁已存在的目标实例,再重新创建。当_CLEAR_TOP和_SINGLE_TOP同时设置的情况下,就是singleTask模式。
- FLAG_ACTIVITY_NEW_TASK 与singleInstance很相似,但与singleInstance有不同,1、新的Task没有说只能存放一个目标Activity。只是说决定是否新建一个Task。而singleInstance模式下新的Task只能放置一个目标Activity。2、在同一应用下,如果Activity都是默认的affinity,那么此Flag无效。而singleInstance默认情况也会创建新的Task。
本文地址:https://blog.csdn.net/shipingxue/article/details/108992018