Activity生命周期 与 Activity 之间的通信
一. 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()方法的参数顺义不一致;
Activity生命周期 与 Activity 之间的通信的更多相关文章
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Activity生命周期,Activity传值(Intent)
生命周期: 从出生到死亡 Activity生命周期的7个方法和3个循环 onCreate() 创建时调用onRestart() 不可见到可见时调用onStart() 用户可见时调用onResume() ...
- java之线程(线程的创建方式、java中的Thread类、线程的同步、线程的生命周期、线程之间的通信)
CPU:10核 主频100MHz 1核 主频 3GHz 那么哪一个CPU比较好呢? CPU核不是越多越好吗?并不一定.主频用于衡量GPU处理速度的快慢,举个例子10头牛运送货物快还是1架飞机运 ...
- Android Activity 生命周期详解
学习android开发这么久对于activity的生命周期还没有仔细思考过,所以,我大致的把这些东西整理一下,希望通过这使自己理解的更透彻点吧! 首先看一下Activity生命周期图和它的的四个阶段 ...
- Fragment的生命周期&同一Activity下不同Fragment之间的通信
Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...
- activity之间參数传递&&获取activity返回值&&activity生命周期
Activity之间參数传递 A activity想将參数传给B activity时能够利用Intent将消息带过去 Intent intent = new Intent(this,BActivity ...
- 文章之间的基本总结:Activity生命周期
孔子:温故而知新.它可以作为一个教师.<论语> 同样的学习技巧.对于技术文件或书籍的经典技术,期待再次看到它完全掌握,这基本上是不可能的,所以,我们常常回来几次,然后仔细研究,为了理解作者 ...
- 文章之间的基本总结Activity生命周期
子曰:溫故而知新,能够為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就全然掌握,那基本不大可能,所以我们须要常常回过头再细致研读几遍,以领悟到作者的思想精 ...
- Android全面解析之Activity生命周期
前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...
随机推荐
- python字符编码转换说明及深浅copy介绍
编码说明: 常用编码介绍: ascii 数字,字母 特殊字符. 字节:8位表示一个字节. 字符:是你看到的内容的最小组成单位. abc : a 一个字符. 中国:中 一个字符. a : 0000 10 ...
- 【JVM】上帝视角看JVM内存模型,分而治之论各模块详情
1. 上帝视角 [树看JVM] [图看JVM] 2. 分而治之 2.1 堆区 构成:堆区由新生代和老年代组成,新生代中包含伊甸区(Eden).幸存者区(survivor from .survivor ...
- FMX有一套自己的消息处理机制。类似这样:
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var ...
- QEP之init()和dispatch()流程图
抽象状态机类QFsm或QHsm有一个函数指针,用于在继承的具体状态机类中指向具体的状态函数,其有两个对外的接口函数init()和dispatch(),其工作原理是理解状态机处理事件过程的关键. 具体状 ...
- 企业SVN版本管理与代码上线方案
1.SVN服务实战 1) 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Sv ...
- 单片机,struct ,union定义标志,节约RAM
单片机的RAM是非常少的,像新唐,STC,合泰等一些国产的51单片机,RAM 512 byte,1k,2k,非常常见, 有时候我们的串口接收一串数据,或AD连续采集,这些数据是不能放到 flash 里 ...
- Qt——事件
1.常见事件 [1]鼠标事件 (1)坐标 x(),y(), 相对windows globalX() globalY() (2)获得点击 button() [2]键盘事件 [3]定时器事件 timerI ...
- Mave环境搭建SSM集成空项目
---恢复内容开始--- 一.空项目案例 软件: 链接:https://pan.baidu.com/s/18Fk8frnWMBRho43P98C97w 提取码:0rk7 项目:链接:https://p ...
- python中利用少量代码快速实现从类对象中抽取所需属性的一种实践
项目中有可能会碰到这样一种场景: 根据一个id,查询得到和id对应的完整数据信息存储对象,比如书籍id到书籍详细信息,用户id到用户详细信息等,详细信息字段可能包括几十甚至上百个数据字段,真正需要返回 ...
- 优步UBER司机全国各地奖励政策汇总 (3月7日-3月13日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...