`

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的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...

    Activity生命周期完整介绍

    总结来说,理解并熟练掌握Activity生命周期是Android开发的基础,开发者需要根据应用需求在不同的生命周期方法中编写适当的代码,确保Activity在各种场景下能正确地保存状态、释放资源和响应用户交互。通过阅读《三 ...

    Fragment与Activity之间通信实例

    每个Fragment都有自己的生命周期,但同时也受到其所在Activity生命周期的影响。 要实现Fragment与Activity之间的通信,我们需要使用一些关键的API方法: 1. **setArguments(Bundle)**:在创建Fragment时,我们可以...

    Activity生命周期相关

    这是Activity生命周期的第一个回调,通常在这里进行初始化工作,如设置布局、数据绑定等。 2. **启动(Initialization)**:创建后,如果Activity可见但部分被遮挡,`onStart()`会被调用,使Activity变得可见。这个...

    Activity和Fragment生命周期研究

    此外,生命周期方法也是实现事件监听和通信的关键,比如通过onActivityResult()处理Activity间的通信,或者在onPause()中停止正在进行的网络请求,以避免占用资源。 在实际开发中,我们可能会遇到Activity和...

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

    在本篇内容中,我们将深入探讨Activity之间的通信以及它们在不同操作下的生命周期变化,并讨论如何传递回传参数。 首先,我们来看Activity之间的通信。在Android系统中,Activity可以通过Intent进行通信。Intent是...

    MVP官方写法和Activity生命周期绑定

    **Activity生命周期与MVP的绑定**: 1. **生命周期回调**:在Activity的生命周期回调中,我们需要合理地管理Presenter。在onCreate()中初始化Presenter,在onStart()和onResume()中可以执行一些准备工作。在onPause...

    android activity 生命周期的深入学习

    Activity生命周期与Service(后台服务)相结合,可以在Service中执行长时间运行的任务,同时保持与Activity的交互。例如,使用`bindService()`可以在Activity与Service之间建立连接,实现通信。 七、生命周期回调的...

    android_Activity生命周期

    Activity生命周期是Android开发中至关重要的一环,因为它决定了应用如何响应用户操作和系统事件。理解Activity的生命周期对于编写高效、稳定且用户体验良好的应用至关重要。 Activity的生命周期由多个关键状态组成...

    Fragment和Activity通信以及Fragment之间通信的方式(二)

    3. **Bundle**:在Fragment的生命周期方法(如`onCreateView()`或`onActivityCreated()`)中,可以通过`getArguments()`获取传入的数据,这些数据在Fragment创建时通过`setArguments(Bundle)`方法放入Bundle中。...

    Android应用源码之8.Activity生命周期-IT计算机-毕业设计.zip

    Activity生命周期的理解和掌握对于任何Android开发者来说都是至关重要的。本篇将详细探讨Activity的生命周期,以及如何在毕业设计中有效利用这些知识。 首先,Activity的生命周期包括几个主要状态:初始化、可见、...

    Activity的生命周期

    - **onDestroy()**: 这是Activity生命周期中的最后一个方法,表示Activity将被系统彻底销毁。可以在此释放资源,执行清理工作。 在实际开发中,我们还需要关注以下几点: - **配置变更**:如屏幕方向改变、语言...

    android生命周期管理:启动一个Activity

    当我们谈论“android生命周期管理:启动一个Activity”,我们关注的是如何启动Activity以及在生命周期中的关键回调函数。 1. 了解生命周期回调函数 Activity的生命周期由一系列的回调方法组成,包括onCreate(), ...

    Android应用源码之(Activity生命周期)-IT计算机-毕业设计.zip

    这是Activity生命周期的最后阶段,系统可能会释放所有与Activity相关的资源。 在进行Android应用开发时,开发者需要注意以下几点: - **内存管理**:在`onPause()`和`onStop()`方法中,应该释放那些不需要在后台...

    Fragemt与Activity之间的通信 双Fragment通信

    Fragment有自己的生命周期和UI,可以独立地处理用户交互事件。 1. **Fragment间的基本通信方式**: - **通过Activity作为中介**:这是最常用的方式,当两个Fragment需要通信时,它们可以通过共同的Activity来传递...

    activity与fragment以及fragment与fragment之间的通信

    总结,Activity与Fragment以及Fragment之间的通信是Android开发中的常见任务,选择合适的通信方式取决于具体需求,如数据类型、组件关系、生命周期管理等因素。在实际开发中,应尽量避免强耦合,提高代码的可维护性...

    android多个activity和一个service通信

    在描述中提到的“坑”可能指的是在通信过程中遇到的问题,例如Service生命周期管理不当导致内存泄漏,或者Activity和Service之间的同步问题。开发者需要确保在Activity销毁时正确解除与Service的连接,防止Service被...

    Fragment的介绍,以及Fragment与Activity之间的通信

    首先,Fragment的生命周期与Activity紧密关联。Fragment有自己的onCreate(), onCreateView(), onStart(), onResume()等方法,这使得Fragment可以独立管理其状态,同时也可以根据Activity的状态进行相应的调整。例如...

    Android中Activity之间通信

    SharedPreferences提供了一种轻量级的持久化数据存储方式,它以键值对的形式存储数据,并且在整个应用程序的生命周期内都可访问。数据保存在XML文件中,通常用于存储用户偏好设置。 要写入SharedPreferences,我们...

    Fragment和Activity通信以及Fragment之间通信的方式(1)

    1. **使用接口**:与Fragment和Activity通信类似,两个Fragment可以通过定义接口,互相调用对方的方法来通信。这种方法需要确保接口的生命周期管理正确,防止内存泄漏。 2. **通过Activity中转**:两个Fragment可以...

Global site tag (gtag.js) - Google Analytics