`

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和Service生命周期及使用AIDL通信实例备份

    Activity和Service生命周期及使用AIDL通信

    Fragment与Activity之间通信实例

    例子主要包括Fragment与Activity之间的通信,代码中还给出了两者之间通信具体调用的函数及其顺序。

    Android四大组件——Activity(一)Activity之间通信及其生命周期变化

    Activity之间通信及其生命周期变化,及回传参数等基础知识点

    Android活动生命周期.ppt

    Android活动生命周期

    Android Fragment与Activity之间的相互通信实例代码

    Android Fragment与Activity之间的相互通信 前言 自从Android3.0引入Fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适配问题。Fragmenty不能单独存在,必须依赖Activity作为视图展示的一部分,同事它具有...

    service的生命周期以及启动方式

    一个小demo,通过求平均值,测试service的生命周期以及启动方式!

    利用接口回调实现Android中Fragment之间的通信.pdf

    Fragment 的生命周期受到 Activity 的生命周期的影响,当 Activity 暂停时,Fragment 也处于暂停状态;当 Activity 被销毁时,Fragment 也会被销毁。 二、接口回调的实现 接口回调是一种双向调用模式,即被调用方法...

    Android编程中的四大基本组件与生命周期详解

    本文实例讲述了Android编程中的四大基本组件与生命周期。分享给大家供大家参考,具体如下: Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。 一:了解...

    联想Android面试题.pdf

    这些知识点涵盖了 Android 面试题中的大部分内容,包括 Activity 生命周期、动画、Handler 机制、Activity、Intent、Service 的关系、线程与进程之间的通信、MVC 模式、数据存储方式、解析 XML 的类、ListView 优化...

    京东2018秋招Android工程师笔试题及答案.pdf

    3. Android Activity 生命周期:Activity 生命周期中有多个状态,包括 onCreate、onStart、onResume、onPause、onStop 和 onDestroy。onSaveInstanceState 方法用于保存 Activity 的状态,在这个方法中可以执行更新...

    Android面试常问基础知识点.docx

    Activity 的生命周期包括以下几个阶段: 1. onCreate(): 为 Activity 设置布局,此时界面还不可见; 2. onStart(): Activity 可见但还不能与用户交互,不能获得焦点 3. onResume(): Activity 可见且可与用户进行...

    Android面试题总结强劲版.pdf

    Android应用开发中,Activity生命周期是非常重要的概念。Activity生命周期指的是Activity从创建到销毁的整个过程中经历的各个阶段。这些阶段包括onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy...

    Activity代理框架AyoActivityNoManifest.zip

    ActivityAttacher就是附着在上面4个模板Activity里的Activity代理ActivityAttacher中持有一个Activity实例对象,是在onCreate时赋值的ActivityAttacher可以处理Activity中的所有配置和生命周期ActivityAttacher提供...

    Android组件通信和后台服务实验报告.pdf

    Service 可以在应用程序的生命周期中长期运行,以便执行一些长期的操作。例如,在上面的代码中,我们可以看到使用 Service 来比较两个整数的大小。 六、进程内服务的管理方法 在 Android 中,我们可以使用 ...

    架构之占位式插件化框架 –组件通信

    插件Activity的生命周期插件内部 Activity 加载Service通信动态广播的使用 占位式,也叫插装式。运行的APP,也称之为宿主。 Activity通信 通过宿主来加载Plugin Activity 1. 环境准备 项目分为3个基础模块,分别是 ...

    Android练习题及答案.docx

    Android 应用开发是移动应用开发中的一种重要方向,本文档总结了 Android 应用开发中的一些重要知识点,涵盖了 Android 应用程序的基本结构、应用程序的生命周期、Intent 的作用、Activity 的生命周期、布局管理器、...

    Android应用开发试题.pdf

    3. Activity 的生命周期:Activity 是 Android 应用程序的主要组件之一,负责处理用户交互。Activity 的生命周期包括 onCreate、onStart、onResume、onPause、onStop 和 onDestroy 六个阶段。 4. Intent 的认识:...

    android开发技巧100条.docx

    Activity与Fragment:深入理解Activity与Fragment的生命周期,合理组织应用的页面结构。 Intent与启动模式:学会使用Intent进行组件间的通信和页面跳转,理解并掌握四种不同的Activity启动模式。

    Android开发中Activity属性设置小结

    Android应用开发中会经常遇到Activity...Activity的生命周期、通信方式和IntentFilter等内容,并提供了一些日常开发中经常用到的关于Activity的技巧和方法。通过本文,你可以进一步了接Android中Activity的运作方式。

    Android 中 Fragment的使用大全

    Fragment必须总是被嵌入到一个Activity中,并且它的生命周期直接受宿主Activity生命周期的影响。 本文内容可以分为下面的几部分: 使用支持库 创建一个Fragment 创建一个动态UI 多个Fragment之间的通信 在一个...

Global site tag (gtag.js) - Google Analytics