什么是activity的生命周期_activity切换生命周期

什么是activity的生命周期_activity切换生命周期Activity生命周期,英文名也叫activity_lifecycle。Activity状态每个Activity在其生命周期内可能会有哪几种状态吗?没错,一共有运行状态、暂停状态、停止状态和销毁状态这4种。运行状态当一个Activity位于返回栈的栈顶时,Activity就处于运行状态。系统最不愿意回收的就是处于运行状态的Activity,因为这会带来非常差的用户体验。暂停状态当一个Activity不再处于栈顶位置,但仍然可见时,Activity就进入了暂停状态。你可能会觉得,既然Activi

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Activity生命周期,英文名也叫activity_lifecycle。

Activity状态

每个Activity在其生命周期内可能会有哪几种状态吗?没错,一共有运行状态、暂停状态、停止状态和销毁状态这4种。

运行状态

当一个Activity位于返回栈的栈顶时,Activity就处于运行状态。系统最不愿意回收的就是处于运行状态的Activity,因为这会带来非常差的用户体验。

暂停状态

当一个Activity不再处于栈顶位置,但仍然可见时,Activity就进入了暂停状态。你可能会觉得,既然Activity已经不在栈顶了,怎么会可见呢?这是因为并不是每一个Activity都会占满整个屏幕,比如对话框形式的Activity只会占用屏幕中间的部分区域。处于暂停状态的Activity仍然是完全存活着的,系统也不愿意回收这种Activity(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种Activity。

停止状态

当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。系统仍然会为这种Activity保存相应的状态和成员变量,但是这并不是完全可靠的,当其他地方需要内存时,处于停止状态的Activity有可能会被系统回收。

销毁状态

一个Activity从返回栈中移除后就变成了销毁状态。系统最倾向于回收处于这种状态的Activity,以保证手机的内存充足。

Activity生命周期(活动的生命周期)

在学习了有关活动编程的知识之后,现在来学习活动中的生命周期。只有完全理解了活动的生命周期,在今后的Android编程中才会更加得心应手,这也是面试Android开发类工作时的一个重要考点。为了让Android App在活动(Activity)生命周期的各个阶段之间导航转换,Activity类提供了6个核心回调方法:onCreate()、onStart()、onResume()、onPause()、onStop()和onDestroy()。当活动进入新状态时,系统会调用这些回调方法。

Activity类中定义了7个回调方法,这些称为我们系统的一个回调,又称为callback。覆盖了Activity生命周期的每一个环节,下面就来一一介绍这7个回调方法的具体作用。

● (1)onCreate()。
这个方法你已经看到过很多次了,我们在每个Activity中都重写了这个方法,它会在Activity第一次被创建的时候调用。你应该在这个方法中完成Activity的初始化操作,比如加载布局、绑定事件等。
这个方法在每次活动最开始启动时都会运行,并且在每一个活动中只允许这个方法出现一次。

● (2)onStart()。
这个方法在Activity由不可见变为可见的时候调用。
当活动开始运行并转入不可运行时,这个方法开始运行,因为应用会为Activity进入前台并为支持交互做准备。

● (3)onResume()。
这个方法在Activity准备好和用户进行交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
活动会在进入“已恢复”状态时来到前台,然后系统调用onResume()回调方法。这是应用与用户交互的状态。应用会一直保持这种状态,直到某些事件发生,让焦点远离应用。此类事件包括接到来电、用户导航到另一个活动或设备屏幕关闭。

● (4)onPause()。
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使用。
当App准备启动另一个活动时进行回调。

●(5) onStop()。
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。
当活动在完全不可见时进行回调。

● (6)onDestroy()。
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
在活动销毁之前进行回调。

● (7)onRestart()。
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
当活动重新开始运行时回调。

以上7个方法中除了onRestart()方法,其他都是两两相对的,从而又可以将Activity分为以下3种生存期。

● (1)完整生存期。Activity在onCreate()方法和onDestroy()方法之间所经历的就是完整生存期。一般情况下,一个Activity会在onCreate()方法中完成各种初始化操作,而在onDestroy()方法中完成释放内存的操作。

● (2)可见生存期。Activity在onStart()方法和onStop()方法之间所经历的就是可见生存期。在可见生存期内,Activity对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法合理地管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的Activity不会占用过多内存。

● (3)前台生存期。Activity在onResume()方法和onPause()方法之间所经历的就是前台生存期。在前台生存期内,Activity总是处于运行状态,此时的Activity是可以和用户进行交互的,我们平时看到和接触最多的就是这个状态下的Activity。

为了帮助你更好地理解,Android官方(Google的文档)提供了一张Activity生命周期的示意图,我们每一个activity是从创建,到结束。它会经历下面这样一个循环周期,如图3.24所示。

在这里插入图片描述
在这里插入图片描述
图 Activity的生命周期

举例子:

package com.example.lifecycle;

import ...

public class MainActivity extends AppCompatActivity{ 
   
    
    String TAG = "myTag";
    @Override
    protected void onCreate(Bundle savedInstanceState) { 
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main)
        log.d(TAG, msg:"onCreate: ");
        //finish();
    }

    @Override
    protected void onStart() { 
   
        super.onStart()
        log.d(TAG, msg:"onStart: ");
    }

    @Override
    protected void onResume() { 
   
        super.onResume()
        log.d(TAG, msg:"onResume: ");
    }

    @Override
    protected void onPause() { 
   
        super.onPause()
        log.d(TAG, msg:"onPause: ");
    }

    @Override
    protected void onStop() { 
   
        super.onStop()
        log.d(TAG, msg:"onStop: ");
    }

    @Override
    protected void onRestart() { 
   
        super.onRestart()
        log.d(TAG, msg:"onRestart: ");
    }

    @Override
    protected void onDestroy() { 
   
        super.onDestroy()
        log.d(TAG, msg:"onDestroy: ");
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170701.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 大话信号与系统 — 奇文共欣赏[通俗易懂]

    大话信号与系统 — 奇文共欣赏[通俗易懂]大话信号与系统前言:大家都知道《信号与系统》是一门很难的课,很多人虽然学过了,但其实什么也没得到,今天给大家推荐这篇文章,看了之后,相信你会有收获。第一课什么是卷积?卷积有什么用?很多朋友和我一样,工科电子类专业,学了一堆信号方面的课,什么都没学懂,背了公式考了试,然后毕业了。先说”卷积有什么用”这个问题。(有人抢答,”卷积”是为了学习”信号与系…

  • Jenkins学习一:Jenkins是什么?

    Jenkins学习一:Jenkins是什么?第一章Jenkins是什么?Jenkins是一个可扩展的持续集成引擎。主要用于:l持续、自动地构建/测试软件项目。l监控一些定时执行的任务。Jenkins拥有的特性包括:l易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。l易于配置-所有配置都是通过其提供的web界面实现。l集成RSS/E-mail通过RSS发布构建结果…

  • JavaScript如何判断是否为数字?

    JavaScript如何判断是否为数字?JavaScript如何判断是否为数字?方法1:使用isNaN()函数isNaN()函数是js自带的全局函数,isNaN()函数用于检查其参数是否是非数字值。如果值x是特殊的非数字值NaN(或者能被转换为这样的值),返回的值就是true;如果值x是其他值,则返回false。isNaN()的缺点就在于null、空格以及空串会被按照0来处理NaN:NotaNumber<script>document.write(isNaN(123));//数字-

  • java中获取当前时间_java如何获得当前时间

    java中获取当前时间_java如何获得当前时间1、System.currentTimeMillis()获取标准时间可以使用System.currentTimeMillis()方法来获取,此方法优势是不受时区的影响,但是得到结果是时间戳的格式,如:1543105352845可以通过代码将时间戳转化为我们可以理解的格式:SimpleDateFormatformatter=newSimpleDateFormat(“yyyy-MM-dd’at’HH:mm:ssz”);Datedate=newDate(Syst..

  • Web前端性能优化——如何提高页面加载速度

    Web前端性能优化——如何提高页面加载速度

    2021年10月14日
  • addEventListener() 方法,事件监听[通俗易懂]

    addEventListener() 方法,事件监听[通俗易懂]addEventListener()方法,事件监听你可以使用removeEventListener()方法来移除事件的监听。语法element.addEventListener(event,function,useCapture);第一个参数是事件的类型(如”click”或”mousedown”).第二个参数是事件触发后调用的函

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号