什么是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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FileStream读写文件「建议收藏」

    FileStream读写文件「建议收藏」FileStream读写文件FileStream类:操作字节的,可以操作任何的文件StreamReader类和StreamWriter类:操作字符的,只能操作文本文件。1、FileStream类FileStream类命名空间: System.IO(1)构造函数:FileStream(String, FileMode):使用指定的路径和创建模式初始

    2022年7月24日
    34
  • 通过PropertyDescriptor反映射调用set和get方法

    通过PropertyDescriptor反映射调用set和get方法1packagecom.zhoushun;importjava.lang.reflect.Method;importjava.lang.reflect.Field;importjava.beans.PropertyDescriptor;publicclassPropertyUtil{ @SuppressWarnings(“unchecked”) publicsta

    2022年10月1日
    0
  • 第一次玩github,第一个开源小项目——xxoo

    第一次玩github,第一个开源小项目——xxoo引言   由于最近的工作写代码比较少,这让LZ产生了一丝危机感。于是便想找一个办法可以没事自己写写代码,自然而然就想到了github。接下来便是一阵捣鼓的过程,其实整个过程很快,主要过程就是注册一个账号,然后创建自己的仓库。看着自己空荡荡的仓库,LZ就想着放上去一些自己平时写的东西,不过仔细一翻才发现,自己平时写的代码都是一片一片的,几乎没有完整的项目或者代码。  平时LZ写博客的时候

    2022年7月17日
    14
  • Python字符串比较

    Python字符串比较InthistutorialwearegoingtoseedifferentmethodsbywhichwecancomparestringsinPython.Wewillalsoseesometrickycaseswhenthepythonstringcomparisoncanfailandgoldenrulestoget…

    2022年6月18日
    38
  • 过压保护(2)_过压保护值和欠压保护值

    过压保护(2)_过压保护值和欠压保护值http://www.elecfans.com/dianlutu/protect/2009102499242.html采用CW136构成的过压保护电路图中是采用CW136构成的过压保护电路,当电子设备

    2022年8月2日
    6
  • html5 visibilitychange事件「建议收藏」

    html5 visibilitychange事件「建议收藏」visibilitychange事件在当前网页在可见和不可见之间变换的时候调用,可以设置用户没有浏览当前网页时执行一些操作,比如停止页面动画。这样可以减少网络请求,减小服务器压力。document.addEventListener(‘visibilitychange’,()=>{if(document.visibilityState===’hidden’){

    2022年6月24日
    42

发表回复

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

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