Activity生命周期

Activity生命周期

1.Activity状态

1.基本状态

  • 运行,active。位于最前台,可以和用户交互的激活状态。
  • 暂停,pause,被透明或者Dialog覆盖,此时可见失去焦点但是不允许交互。
  • 停止,stop,被Active覆盖,失去焦点不可见
  • 销毁,destoryed,被系统回收,或者没有被启动。

2.生命周期

2.1常见的生命周期方法

  • onCreate,调用一次,被创建的时候调用,初始化View和一些数据
  • onStart,显示到前台的时候调用,用户可见
  • onResume,用户获取焦点,可以交互,此时位于栈顶
  • onPause,暂时不可交互,可见
  • onStop,不可见
  • onRestart,再次回到前台的时候被调用
  • onDestory,被系统销毁

Activity生命周期

图1 生命周期图

Activity生命周期

Activity生命周期

Activity生命周期

2.2Activity常用的事件

1.常用事件

  • 都是绑定在Activity身上已有的事件监听方法
  • onKeyDown(code,event),按下
  • onKeyUp(code,event),抬起
  • onTouchEvent(event),点击屏幕

2.系统事件的简单使用

@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        System.out.println("keycode"+keyCode);
        if (keyCode==KeyEvent.KEYCODE_4){
            return  true;
        }
            return super.onKeyUp(keyCode, event);
    }

2.3Activity的启动模式

1.Android采用任务栈(Task)的方式管理Activity的实例。当启动一个应用时,Android会为之创建一个任务栈(满足先进后出的原则)。先启动的Activity压在栈底,后启动的Activity放在栈顶,通过启动模式可以控制Activity在任务栈中的加载情况。

  • 启动模式就是管理任务的一种方式

2.任务栈的数据结构

Activity生命周期

3.分类

在activity标签中的lanuchMode设置

  • standard
  • singleTop
  • singleTask
  • singleInstance

1)standard

  • Activity 默认启动模式。每当新启动一个新的Activity,它就会进入任务栈,并处于栈顶的位置。对于使用standard模式的Activity,每次启动都会创建一个新的Activity实例对象。

Activity生命周期

2)singleTop

  • singleTop模式:与standard类似,不同的是,当启动的Activity已经处于栈顶时,则直接使用它不创建新的实例。如果启动的Activity没有位于栈顶时,则创建一个新的实例位于栈顶。
  • 栈顶有不创建,没有就去创建

Activity生命周期

3)singleTask

  • singleTask模式:让某个Activity在当前栈中只存在一个实例。每次启动该模式的Activity时,系统首先会检查栈中是否存在该活动的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有的Activity出栈,如果没有发现则创建一个新的实例。
  • 栈中有不创建(回到栈顶的同时前面的全部销毁),没有就创建

Activity生命周期

4)singleInstance

singleInstance模式:无论从哪个任务栈中启动该模式的Activity,只会创建一个Activity实例,并且会使用一个全新的任务栈来装载该Activity实例。

分为以下两种情况:

1、要启动的Activity不存在,系统会先创建一个新的任务栈,再创建该Activity实例,并把该Activity加入栈顶;

2、如果要启动的Activity已经存在,无论位于哪个应用程序或者哪个任务栈,系统都会把该Activity所在的任务栈转到前台,从而使该Activity显示出来。

  • 案例介绍:singleInstance:将Activity压入一个新建的任务栈中。例如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance,则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的Launch mode为standard,此时如果再按返回键,则栈1变成:A B C。也就是说现在界面还显示C的内容,不是D。

Original: https://blog.csdn.net/weixin_41957626/article/details/128425685
Author: 简单点了
Title: Activity生命周期

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/793239/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球