什么是EasyActivityResult
EasyActivityResult是开源基础组件集成库EasyAndroid中的基础组件之一。其作用是:解决onActivityResult业务逻辑臃肿的问题
EasyAndroid作为一款集成组件库,此库中所集成的组件,均包含以下特点,你可以放心使用~~
- 精简: 作为一款集成库,我不希望有那种大组件,尽量控制好集成库的大小。不要有冗余代码
- 内聚: 尽量减少甚至避免单一组件对别的模块进行依赖。做到组件间独立。
得益于编码时的高内聚性
,若你只需要使用EasyActivityResult
. 那么可以直接去copy EasyActivityResult源码文件
到你的项目中,直接进行使用,也是没问题的。
Activity数据回传业务遇到的问题
在平时的开发中,我们需要页面进行数据回传时,都是通过startActivityForResult
启动,然后在onActivityResult
方法处处理各自的业务逻辑。比如图片拍照,比如地址选择等。
这样的做法,却算不上优雅,而且随着业务的持续迭代等原因,onActivityResult
方法也会容易失控,变得越来越臃肿,变得越来越难以维护。出现一堆的if-else if
语句块。
而分析一下这种数据回传业务的使用场景:需求应该是每个不同的startActivityForResult
的启动分支。都对应于一个onActivityResult
的回传判断分支。它们是一一对应的关系。
也就是说,如果我们能方便的
在onActivityResult
处,将回传数据正确的派发到对应的startActivityForResult
分支处,做到谁发起的
就交给谁自己处理
。这种业务场景就完美了。
而EasyActivityResult组件即是专门用来干这种事的!
特性
- 接管
onActivityResult
方法,解耦数据回传逻辑 - 在需要时,
自动创建
requestCode提供使用,免去每次都需要定义不重复的requestCode
步骤 - 防暴击:两次启动间隔必须大于1秒。
用法
- 首先,在基类的
onActivityResult
方法中添加中转方法:
class BaseActivity:Activity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
// 进行回传数据过滤转发
EasyActivityResult.dispatch(this, requestCode, resultCode, data)
}
}
- 最后,使用EasyActivityResult.start()方法进行启动即可:
EasyActivityResult.startActivity(
context,
intent,
{result:Int, data:Intent -> // 数据回调接口
// TODO
// result:对应回传的resultCode
// data: 对应回传的intent数据
})
使用方式就是这么简单!而且细心点的可以发现:**根本不用再配置requestCode了!**又省了一步操作。美滋滋~~
不用配置requestCode的原因是: 在组件内部。当你配置有数据回调接口,那么就会自动生成一个随机的requestCode提供使用:
if (context !is Activity || callback == null) {
context.startActivity(intent)
} else {
val requestCode = codeGenerator.nextInt(0x0000FFFF)
...
}
而且,由于我们也接管了启动入口。所以也能很方便的进行防暴击过滤:
以下方的模拟暴击点击为例:
@OnClick(R.id.violentStart)
fun violentStart() {
// 暴击启动测试:同时被调用启动多次,应只有第一次启动成功
EasyActivityResult.startActivity(this,
Intent(this, EasyToastActivity::class.java),
{_, _ -> EasyToast.DEFAULT.show("暴击启动测试:第一次启动任务 接收返回信息") })
EasyActivityResult.startActivity(this,
Intent(this, EasyToastActivity::class.java),
{_, _ -> EasyToast.DEFAULT.show("暴击启动测试:第二次启动任务 接收返回信息") })
EasyActivityResult.startActivity(this,
Intent(this, EasyToastActivity::class.java),
{_, _ -> EasyToast.DEFAULT.show("暴击启动测试:第三次启动任务 接收返回信息") })
}
页面效果展示:
今天的文章EasyAndroid基础集成组件库之:EasyActivityResult 拒绝臃肿的onActivityResult代码分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/19908.html