一. Activity生命周期

上图

1. Activity状态

激活状态 : Activity出于前台 , 栈顶位置;

暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , 后面的Activity出于暂停状态;

停止状态 : 被其它的Activity覆盖 , 用户不可见 , 但是仍然存在;

2.Activity操作生命周期的方法

onCreate() : 初始化一些成员变量 , 如View等 , 此时进入停止状态;

onStart() : 被用户可见之前调用 , 调用之后进入暂停状态 , 如果不满足条件我们不想让用户进入应用 , 可以在这里进行限制 , finish掉该Activity;

onResume() : 在与用户交互之前调用 , 调用之后进入激活状态;

onPause() : 激活另一个Activity时调用 , 调用之后进入暂停状态 , 界面可见 , 失去焦点; 该操作用来保存当前Activity数据;

onStop() : Activity被覆盖前调用 , 调用之后该Activity不可见; 该方法用来关闭旧的Activity , 注意是完全不可见的时候才会调用这个方法;

onDestroy() : Activity被销毁前调用 ;

注意 : 在暂停状态 和 停止状态 , 如果内存紧张 , 该Activity会被系统回收;

3.Activity运作流程

(1)第一次启动Activity A

首先调用onCreate()方法创建Activity进入停止状态 -> 调用onStart()方法进入暂停状态 -> 调用onResume()方法进入激活状态;

(2)从Activity A 跳转到 Activity B

A先执行onPause()方法进入暂停状态 -> B执行onCreate()方法进入停止状态 -> B执行onStart()方法进入暂停状态 -> B执行onResume()方法进入激活状态 -> A被完全覆盖执行onStop()方法进入停止状态;

(3)从ActivityB 回到 Activity A

B执行onPause()方法进入暂停状态 -> A调用onRestart()方法进入停止状态 -> A调用onStart()方法进入暂停状态 -> A调用onResume()方法进入激活状态 -> B被覆盖调用onStop()方法进入停止状态 -> B执行onDestroy()方法销毁

这里注意Activity的栈是不可逆的 , 只能后退 , 不能前进 , 回退后 , 原来的栈顶的Activity就马上销毁了.

二. Activity之间的通信

1. Intent传递参数的方式

intent传递参数有两种方式 :

注意 : 在onCreate()方法中创建Intent的时候 , 上下文参数不能使用this , 要使用getApplicationContext();

(1)通过Bundle对象传递参数

Bundle对象是一个HashMap<String, Object>, 我们将数据存到这个Bundle对象中 , 然后将Bundle对象放入到Intent中去.

eg:

				Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString("name", "MainActivity");
				intent.putExtra("bundle", bundle);
				startActivity(intent);

注意 : 

向bundle中存放数据的时候 , 对于不用的数据类型要调用不同的方法 , String类型就要调用putString()方法 ...

向Intent对象中存放bundle对象的时候 , 直接调用Intent的putExtra()方法即可;

从Intent对象取出数据 :

取出Bundle对象 : Bundle bundle = intent.getBundleExtra("bundle")方法.

从Bundle中取出数据 :

String string = bundle.getString("string")获取字符串数据.

Boolean boolean = bundle.getBoolean("boolean")获取布尔变量.

(2)直接将数据放入Intent对象

存放时直接调用Intent的putExtra()方法 , 无论什么类型都是这个方法 , 但是取出的时候要调用相应类型的方法 , 如果是boolean类型就调用getBooleanExtra()方法 , 如果是字符串类型就调用getStringExtra()方法 .

				Intent intent = new Intent(getApplicationContext(), MainActivity.class);
				intent.putExtra("name", et_second.getText().toString());
				startActivity(intent);

(3)在跳转的Activity获取数据

在Activity中想要取出跳转之前放入的数据 , 调用Activity的getIntent()方法 , 获取Intent对象 , 在调用Intent对象的方法获取数据;

①获取Bundle对象 , 并从Bundle对象中获取数据 :

		Bundle bundle = this.getIntent().getBundleExtra("bundle");
		String name = bundle.getString("name");
		tv_second.setText(name);

注意 : 获取Bundle对象的方法 : getBundleExtra("key");从Bundle中获取数据的方法 : bundle.getString("key")调用相应数据类型的方法;

②获取Intent对象中的数据 :

String name = this.getIntent().getStringExtra("name");
        tv_main.setText(name);

2. startActivityForResult()方法解析

在创建了Intent之后 , 一般情况下是使用startActivity()启动另一个Activity , 如果我们需要启动另外一个Activity , 并且需要将这个Activity中的数据返回的时候 , 就需要调用startActivityForResult()方法启动Activity;

在Activity A 中启动另外一个Activity , 需要重写 A 中的 onActivityResult()方法 , 这个方法是用来处理返回的数据的.

在Activity B 中需要调用setResult()方法 , 设置返回的Intent , 同时注意要finish()掉这个Activity;

相关参数 :

startActivityForResult(Intent intent, int requestCode) : 第二个参数是请求码 , 请求码在 A 中的onActivityResult()方法中识别intent用的;

onActivityResult(int requestCode, int resultCode, Intent intent) : 第一个参数是请求码 , 第二个参数是结果码 , 这里我们只需要识别一种就可以 , 也可以两个都进行识别;

setResult(int resultCode, Intent intent) : 第一个参数是结果码 , 用于 A 中的onActivityResult()中的Intent对象识别.

注意 : startActivityForResult()方法与setResult()方法的参数顺义不一致;

【Android 应用开发】Activity生命周期 与 Activity 之间的通信的更多相关文章

  1. Activity生命周期,Activity传值(Intent)

    生命周期: 从出生到死亡 Activity生命周期的7个方法和3个循环 onCreate() 创建时调用onRestart() 不可见到可见时调用onStart() 用户可见时调用onResume() ...

  2. Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  3. java之线程(线程的创建方式、java中的Thread类、线程的同步、线程的生命周期、线程之间的通信)

    CPU:10核 主频100MHz 1核  主频    3GHz 那么哪一个CPU比较好呢? CPU核不是越多越好吗?并不一定.主频用于衡量GPU处理速度的快慢,举个例子10头牛运送货物快还是1架飞机运 ...

  4. Android Activity 生命周期详解

    学习android开发这么久对于activity的生命周期还没有仔细思考过,所以,我大致的把这些东西整理一下,希望通过这使自己理解的更透彻点吧! 首先看一下Activity生命周期图和它的的四个阶段 ...

  5. android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...

  6. Android开发--Activity生命周期回顾理解

    Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...

  7. Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解

    前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...

  8. Android开发——Activity生命周期

    Android开发--Activity生命周期 Activity作为四大组件之首,也是使用最频繁的一种组件.本文将主要讲解Activity生命周期,包括正常情况下的Activity生命周期和异常情况下 ...

  9. Android开发 - Fragment与Activity生命周期比较

    1. Fragment的生命周期 见下图 2. 与Activity生命周期的对比 见下图 3. 代码场景演示实例 切换到该Fragment: AppListFragment(7649): onAtta ...

随机推荐

  1. 阻尼回弹效果的ScrollView嵌套GridView

    以前写过一篇带阻尼回弹效果的ScrollView,但是有些小问题,于是又重新整理了一下,这篇文章一是一个带阻尼的Scrollview,再个就是Scrollview嵌套GridView实现,而GridV ...

  2. 与markdown的第一次接触

    什么是markdown markdown是一种比html轻量级的标记语言. markdown的介绍与学习请参考:markdown认识与入门 CSDN Markdown博客视频教程 知乎: 怎样引导新手 ...

  3. Android 访问assets下的文件

    assets下经常可以放一些比较大的资源,对于这些资源我们如何访问. 步骤 1.获取AssetManager. AssetManager am = getResources().getAssets() ...

  4. 仿淘宝购物车demo---增加和减少商品数量

    在上一篇博客中,小编简单的介绍了如何使用listview来实现购物车,但是仅仅是简单的实现了列表的功能,随之而来一个新的问题,买商品的时候,我们可能不止想买一件商品,想买多个,或许有因为某种原因点错了 ...

  5. Android Studio科普篇——2.误区

    1.删除一行是ctrl+x? 这是一个被谣传得很广泛的快捷键,但其实删除一行的快捷键不是ctrl+x,而是ctrl+y.ctrl+x在不选中内容的情况下,是剪切当前行,而ctrl+y才是删除当前行,它 ...

  6. request.setAttribute()怎么用的?

    request.setAttribute()怎么用的? JSP1代码 String [] test=new String[2]; test[0]="1"; test[1]=&quo ...

  7. 【一天一道LeetCode】#95. Unique Binary Search Trees II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  8. Chapter 2 User Authentication, Authorization, and Security(5):使用固定服务器角色

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38844999,专题目录:http://blog.csdn.net/dba_huangzj ...

  9. native2ascii命令

    native2ascii命令 native2ascii的命令行的命名格式:       native2ascii -[options] [inputfile [outputfile]] 说明:     ...

  10. Mac 下 Chrome多个Tab之间切换

    下一个Tab: Control + Tab前一个Tab: Control + Shift + Tab记录一下备忘.