欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Activity详解

程序员文章站 2023-01-31 12:54:52
一、Activity介绍Activity是Android的四大组件之一,它提供屏幕,用户通过它与机器产生交互。二、Activity的生命周期onresume 与 onstart 的区别onStart 用户可见,但还没有获得焦点,用户还不能进行操作。onResume 界面可见,并获得焦点,用户可以进行操作了。Activity A 启动 Activity B 时的操作打印Activity_A onPause()......Activity_B onCreate()...........

一、Activity介绍

Activity是Android的四大组件之一,它提供屏幕,用户通过它与机器产生交互。

二、Activity的生命周期

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