什么是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: ");
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • html5爱心代码_html爱心动画代码

    html5爱心代码_html爱心动画代码代码<!doctypehtml><html><head><metacharset=”utf-8″><title>canvas爱心</title><style>html,body{height:100%;padding:0;margin:0;background:#000;}canvas{position:absolute;width:100%;

    2022年10月10日
    3
  • 【JavaScript】document对象_Cookie属性「建议收藏」

    【JavaScript】document对象_Cookie属性「建议收藏」Cookie是什么?借助document的cookie属性,Javascript程序就可以实现与www服务器一样的cookie功能,即获取当前的cookie信息和产生一个新的cookie。一个浏览器访问www服务器的每个网页文件,都是独立的,每个网页的javascript程序之间的信息也不能共享。即使是同一个网页的上一次访问和下一次访问之间也无法传递数据。同一张网页

    2022年7月27日
    9
  • 原生JS投票特效

    效果:http://hovertree.com/texiao/js/24/效果图:代码如下:转自:http://hovertree.com/h/bjaf/jsdiaocha.htm特效:htt

    2021年12月23日
    52
  • 可攻陷所有WiFi网络!KRACK 漏洞发现者回答纪实

    可攻陷所有WiFi网络!KRACK 漏洞发现者回答纪实如果你能连接到的Wi-Fi一夜之间不安全了,通过自家路由器的Wi-Fi上网冲浪却陷入勒索软件和其他恶意软件的包围中,一浪冲到沙滩上……这并非是夸张,就在今天,比利时安全研究人员MathyVanhoef表示,WPA2安全加密协议已经被破解,并在演示视频中对一部Android智能手机执行了一次KRACK。在演示中,攻击者可以对用户传输…

    2022年6月4日
    32
  • pytorch-DataLoader(数据迭代器)

    pytorch-DataLoader(数据迭代器)目录1.1dataset1.1.1Map-styledatasets实现方法一(简单直白法)实现方法二(借助TensorDataset直接将数据包装成dataset类)实现方法三(地址读取法)1.1.1Iterable-styledatasets我们一般使用一个for循环(或多层的)来训练神经网络,每一次迭代,加载一个batch的数据,神经网络前向反向传播各一次并更新一次参数。而这个过程中加载一个batch的数据这一步需要使用一个torch.utils.data.DataLoader对象,并且

    2022年6月11日
    80
  • 近日学习笔记:df -h和du -sh命令,查看linux版本,vbm管理工具,su命令,ssh服务升级技巧,source命令

    近日学习笔记:df -h和du -sh命令,查看linux版本,vbm管理工具,su命令,ssh服务升级技巧,source命令文章目录df -h和du -sh区别df -h查看整个系统中文件系统的使用情况du -sh *查看当前目录下各个文件及目录占用空间大小查看Linux系统版本的命令:VirtualBox管理工具Vboxmanagesu与 su -的区别echo $?ssh服务升级BBS-GO的安装 linux + 宝塔面板【进了解】宝塔界面+数据库+NGINX的安装source命令~目录和/目录的区别df -h和du -sh区别(du, disk usage,-s仅显示总计,-h自适应单位 )df -h查看整个系统中文

    2022年8月11日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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