zoukankan      html  css  js  c++  java
  • 每天一点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方法是一对;

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

  • 相关阅读:
    Reactive Extensions (Rx) 入门(5) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(4) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(3) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
    Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要
    Xamarin NuGet 缓存包导致 already added : Landroid/support/annotation/AnimRes 问题解决方案
    Android 系统Action大全
    Xamarin Forms 实现发送通知点击跳转
    如何理解灰度发布
    推荐一款分布式微服务框架 Surging
  • 原文地址:https://www.cnblogs.com/cisol/p/5811689.html
Copyright © 2011-2022 走看看