手记

【九月打卡】第1天 Android 中 Activity 之间数据通信的方式

课程名称:BAT大牛亲授技能+技巧 Android面试快速充电升级
课程章节:Android基础相关面试问题
主讲老师:DocMike

课程内容

1.Activity 之间的相互通信

Activity 之间的相互通信主要有三种方式:

  1. 使用通信组件 Intent,将 Bundle 对象嵌入到 Intent 中,通过调用 startActivity() 或 startActivityForResult()方法;
  2. 通过类的静态变量,可以获取 Activity 的静态信息;
  3. 通过全局变量,可以声明一个类或者直接使用 Application 对象,在这个类或 Application 对象中声明一些全局变量。

2.Activity 与 Fragment 之间的相互通信

Activity 传递数据给 Fragment:

  1. 通过 Bundle 来封装数据,通过在 Activity 中调用 fragment.setArguments(bundle) 的方式,将数据传递给 Fragment。使用时需要注意在 Fragment 中使用 isAdded() 来判断 Fragment 是否已经依附在 Activity 上。
  2. 直接在 Activity 中声明方法,在 Fragment 中获取 Activity 实例,调用方法。

Fragment 传递数据给 Activity:

  1. 使用通信框架,如 EventBus 等;
  2. 通过广播的方式;
  3. 接口回调的方式。

接口回调的方式有以下几个步骤:

  1. 在 Fragment 中定义一个公共内部回调接口,声明一个接口变量。需要接收数据的 Activity 需要实现定义的这个接口。
  2. 当 Fragment 添加到 Activity 上时,通过 onAttach() 回调方法,对接口变量进行赋值。
  3. 当 Fragment 从 Activity 上剥离时会回调 onDetach() 方法,此时需要把传递进来的 Activity 对象释放掉,不然会影响 Activity 的销毁,从而产生内存泄漏。

3.Activity 与 Service 之间的相互通信

Activity 与 Service 之间的通信总结起来有三种方式:

  1. 通过绑定服务的方式,利用 ServiceConnection 类实现通信。具体做法是:首先定义一个 Binder 对象,接着在 Activity 中实现 ServiceConnection 接口,然后在 onServiceConnected() 方法中获取绑定服务的 Binder 对象,最后通过 Binder 对象来传递数据。
  2. 通过 Intent 来传递数据,使用 Intent 的方式虽然代码上比较简单,但是只能传递简单的数据,性能上没有优势。
  3. 通过 Callback + Handler 的方式实现通信。具体做法是:首先在 Service 类中定义一个 Callback,将要传递的数据通过 Callback 传递出去,接着在 Activity 中实现 ServiceConnection 接口,重新 onServiceConnected() 方法,最后在该方法中通过 Binder 对象获取 Service 的引用,给 Service 设置 callback。**注意此时 callback 回调的方法是在异步线程中的,Activity 接收到数据时要通过 Handler 来完成线程的切换。

课程收获

通过这一章的学习,重点梳理了 Android 中常见控件的数据传递,虽然知识点都是比较基础,但是往往越是基础的地方,也是越容易被忽略的地方,通过学习,对基础知识进行了梳理,有了比较系统的认识。



2人推荐
随时随地看视频
慕课网APP