Activity面试(3): Activity之间的通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yz_cfm/article/details/85465170

    其实这个问题虽然简单,但是还是让我思考了很久,也在网上查询了很多文章去了解。因为我在想是把所有能想到的通信方式都列出来呢,还是只列出来重点的、常用的,良久,我还是选择了后者(能力有限)!这里列出常用的三种方式,像持久化技术、使用剪切板、使用 EventBus 等等有兴趣的话自己好好查查了解了解就好了。

常用的三种 Activity 之间的通信方式:
1. 使用 Intent/Bundle
2. 类静态变量

3. 全局变量

解析1: 使用 Intent / Bundle
这个是Android官方推荐我们使用的方法。
a. 使用 intent :

FirstActivity.java:
Intent intent = new Intent(FirstActivity.class, SecondActivity.class);
intent.putExtra(key, value);
startActivity(intent);

SecondActivity.java:
Intent intent = getIntent();
String value1 = intent.getStringExtra(key1);
int value2 = intent.getStringExtra(key2);

b. 使用 Bundle :

FirstActivity.java:
Intent intent = new Intent(FirstActivity.class, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString(key1, value1);
bundle.putInt(key2, value2);
intent.putExtras(bundle);

SecondActivity.java:
Intent intent = getIntent();
Bundle bundle = bundle.getExtras();
String value1 = bundle.getString(key1);
int value2 = bundle.getInt(key2);

    使用 intent 和 Bundle 传值它们之间的区别是什么?
    这里举个简单的例子,比如说我们现在有三个活动Activity A,B, C。然后我们将一个数据从 A 通过 B 再传到 C 中,如果使用 Intent 就需要把数据从 A 传到 B 后,再在 B 中将数据取出后再传给 C,而使用 Bundle 就更方便,不用在 B 中将数据取出,直接获取 Bundle 对象后就可以直接传到 C 即可,而且还可以直接给 Bundle 对象添加新数据,所以更方便。

解析2: 类静态变量
    这个就很简单了,比如说我们将一个 Object 对象从 FirstActivity 传到 SecondActivity中,此时我们只需要在SecondActivity 中定义一个静态变量:

Public static Object object;

然后在 FirstActivity 跳转到 SecondActiviy 时,在FristActivity中对其赋值即可:

Object object = new Object();
SecondActivity.object = object;

虽然这样使用起来很方便,但是一般情况下我们并不推荐使用这种方式,因为当在系统内存不足的时候很容易会被GC回收,然后导致各种空指针异常,从而导致app崩溃。

解析3: 全局变量
使用 Android 中的 Application 类来完成,使用它很简单,我们只需要两步:
a. 自定义一个子类继承自 Application 类:

public class MyApplication extends Application{}

b. 在 AndroidManifest.xml 文件中 <application> 标签中的 name 属性修改为自己定义的 Application 名称即可:

android:name=".MyApplication"

接着我们只需要在 MyApplication 中定义我们想要定义的变量即可,这个变量由于 Application 类的生命周期就相当于是全局变量,我们在 Activity 中直接通过 getApplication() 方法即可获取这个类的对象,然后使用我们自己定义的全局变量。

猜你喜欢

转载自blog.csdn.net/yz_cfm/article/details/85465170
今日推荐