课程名称:BAT大牛亲授技能+技巧 Android面试快速充电升级
课程章节:Android基础相关面试问题
主讲老师:DocMike
课程内容
1.Activity 之间的相互通信
Activity 之间的相互通信主要有三种方式:
- 使用通信组件 Intent,将 Bundle 对象嵌入到 Intent 中,通过调用 startActivity() 或 startActivityForResult()方法;
- 通过类的静态变量,可以获取 Activity 的静态信息;
- 通过全局变量,可以声明一个类或者直接使用 Application 对象,在这个类或 Application 对象中声明一些全局变量。
2.Activity 与 Fragment 之间的相互通信
Activity 传递数据给 Fragment:
- 通过 Bundle 来封装数据,通过在 Activity 中调用 fragment.setArguments(bundle) 的方式,将数据传递给 Fragment。使用时需要注意在 Fragment 中使用 isAdded() 来判断 Fragment 是否已经依附在 Activity 上。
- 直接在 Activity 中声明方法,在 Fragment 中获取 Activity 实例,调用方法。
Fragment 传递数据给 Activity:
- 使用通信框架,如 EventBus 等;
- 通过广播的方式;
- 接口回调的方式。
接口回调的方式有以下几个步骤:
- 在 Fragment 中定义一个公共内部回调接口,声明一个接口变量。需要接收数据的 Activity 需要实现定义的这个接口。
- 当 Fragment 添加到 Activity 上时,通过 onAttach() 回调方法,对接口变量进行赋值。
- 当 Fragment 从 Activity 上剥离时会回调 onDetach() 方法,此时需要把传递进来的 Activity 对象释放掉,不然会影响 Activity 的销毁,从而产生内存泄漏。
3.Activity 与 Service 之间的相互通信
Activity 与 Service 之间的通信总结起来有三种方式:
- 通过绑定服务的方式,利用 ServiceConnection 类实现通信。具体做法是:首先定义一个 Binder 对象,接着在 Activity 中实现 ServiceConnection 接口,然后在 onServiceConnected() 方法中获取绑定服务的 Binder 对象,最后通过 Binder 对象来传递数据。
- 通过 Intent 来传递数据,使用 Intent 的方式虽然代码上比较简单,但是只能传递简单的数据,性能上没有优势。
- 通过 Callback + Handler 的方式实现通信。具体做法是:首先在 Service 类中定义一个 Callback,将要传递的数据通过 Callback 传递出去,接着在 Activity 中实现 ServiceConnection 接口,重新 onServiceConnected() 方法,最后在该方法中通过 Binder 对象获取 Service 的引用,给 Service 设置 callback。**注意此时 callback 回调的方法是在异步线程中的,Activity 接收到数据时要通过 Handler 来完成线程的切换。
课程收获
通过这一章的学习,重点梳理了 Android 中常见控件的数据传递,虽然知识点都是比较基础,但是往往越是基础的地方,也是越容易被忽略的地方,通过学习,对基础知识进行了梳理,有了比较系统的认识。
点击查看更多内容
2人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦