• 每天一点Android干货-Activity的生命周期


     Activity

      Activity是这样一个程序组件,它为用户提供一个用于任务交互的画面。

      一个应用程序通常由多个activity组成,它们彼此保持弱的绑定状态。典型的,当一个activity在一个应用程序内被指定为主activity, 那么当程序第一次启动时,它将第一个展现在用户面前。为了展现不同的内容,每一个activity可以启动另外一个。 每当一个新的activity被启动,那么之前的将被停止。但系统将会把它压入一个栈(“back stack”即后退栈),当一个新的activity启动,它将被 放到栈顶并获得用户焦点。后台栈遵循后进先出的栈机制。所以当用户完成当前页面并按下返回按钮时,它将被pop出栈(并销毁),之前的activity将被恢复。

       当一个activity因为另一个activity的启动而被停止,那么其生命周期中的回调方法,将会以状态改变的形式被调用。 activity通过它自身状态的改变可以收到多个回调方法。当系统创建,停止,恢复,销毁它的时候。并且每个回调方法都给你做相应处理工作的机会。 例如,当停止的时候,你的activity应当释放比较大的对象,例如网络连接,数据连接。当你的activity恢复时,你可以请求必须的资源并恢复一些被打断的动作。 这些状态事务的处理就构成了activity的生命周期。

    如何在一个应用程序中定义多个Activity?

    1.创建一个继承自Activity或其子类的类,

    2.在配置文件中声明activity

    Activity的切换

      生成一个意图对象(Intent),调用setClass(context, class)方法设置所要启动的Activity,Activity是Context的子类,所以可以这样写intent.setClass(FirstActivity.this, SecondActivity.class);

    1.调用startActivity(intent)方法启动Activity;

    2.调用startActivityForResult(intent ,1)方法启动Activity并接受第二个Activity回传回来的数据。

       在第一个页面中用onActivityResult(int requestCode, int resultCode, Intent data)方法来接受数据。

       在第二个页面中用setResult(int resultCode, Intent data)方法来设置回传的数据。

    back stack 后退栈:存放的是Activity对象;

    应用程序显示的是BackStack顶部的Activity,点击后退按钮,移除顶部的Activity。

    Activity之间传递数据

    Intent是Android应用程序当中的组件之一,Intent就是对意图的抽象。

    Intent当中最重要的内容是action与data,action代表切换的动作,data代表切换涉及到哪两个Activity以及传递的数据。

    使用putExtra()系列方法向Intent对象当中存储数据,使用getXXXExtra()系列方法从Intent对象当中取出数据。

    Activity的生命周期函数:

    方法描述之后可否被杀死?下一个方法
    onCreate() activity第一次被创建时调用。在这里你应该完成所有常见的静态设置工作——创建view、绑定list数据等等。 本方法传入一个包含了该activity前一个状态的Bundle对象(如果之前已捕获了状态的话,详见后面的保存Activity状态)。

    下一个回调方法总是onStart()。

    onStart()
    onRestart() activity被停止后、又再次被启动之前调用。

    下一个回调方法总是onStart()

    onStart()
    onStart() activity要显示给用户之前调用。

    如果activity进入前台,则下一个回调方法是onResume();如果进入隐藏状态,则下一个回调方法是onStop()。

    onResume() 或 onStop()
    onResume() activity开始与用户交互之前调用。这时activity是在activity栈的顶端,用户可以向其中输入。

    下一个回调方法总是onPause()。

    onPause()
    onPause() 当系统准备启动另一个正在恢复的activity时调用。这个方法通常用于把未保存的改动提交为永久数据、停止动画播放、以及其它可能消耗CPU的工作等等。 它应该非常迅速地完成工作,因为下一个activity在本方法返回前是不会被恢复运行的。

    如果activity返回前台,则下一个回调方法是onResume();如果进入用户不可见状态,则下一个是onStop()

    可以 onResume() 或 onStop()
    onStop() 当activity不再对用户可见时调用。原因可能是它即将被销毁、或者其它activity(已有或新建的)被恢复运行并要覆盖本activity。

    如果activity还会回来与用户交互,则下一个回调方法是onRestart();如果这个activity即将消失,则下一个回调方法是onDestroy()

    可以 onRestart() 或 onDestroy()
    onDestroy() 在本activity被销毁前调用。这是activity收到的最后一个调用。 可能是因为activity完成了工作(有些人在这里调用finish()), 也可能是因为系统为了腾出空间而临时销毁activity的本实例。 可以利用isFinishing() 方法来区分这两种情况。 可以

    生命周期函数是由Android操作系统来调用的:

    两个Activity之间切换的过程(第一个Activity打开第二个Activity,再返回到第一个Activity)

    MainActivity onCreate
    MainActivity onStart
    MainActivity onResume

    //激活第二个Activity

    MainActivity onPause
    SecondActivity onCreate
    SecondActivity onStart
    SecondActivity onResume
    MainActivity onStop

    //返回第一个Activity

    SecondActivity onPause
    MainActivity onRestart
    MainActivity onStart
    MainActivity onResume
    SecondActivity onStop
    SecondActivity onDestroy

    Activity对象的状态:

    Resumed:Activity对象处于运行状态

    Paused:另一个Activity位于前端,但是本Activity还可见,并不一定会释放所占用的内存

    Stoped:另一个Activity位于前端,完全遮挡本Activity,并不一定会释放所占用的内存


    成对儿的生命周期函数:

    onCreate 与 onDestroy方法是一对;

    onStart 与 onStop方法是一对;

    onResume 与 onPause方法是一对;

    ————————————————————————————————————————————————————————————

  • 相关阅读:
    .net core使用 AutoMapper
    使用 ASP.NET Core 和 Entity Framework Core 入门
    使用vue-quill-editor图片上传
    使用NPOI 做Excel导出
    利用SmtpClient类发送邮件
    使用Area(区域)会遇到的问题
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器
    MySQL的内存都用在了哪里
    (转载)MySQL buffer pool中三种page以及链表
    MySQL8.0备份工具之Xtrabackup
  • 原文地址:https://www.cnblogs.com/cisol/p/5811689.html
Copyright © 2020-2023  润新知