一、真的需要new一个Intent吗?
在 Android 中,打开一个 Activity ,有多少种方式?不过不管是使用什么方式,最终都没办法逃避创建一个 Intent ,然后startActivity()
。
那么,如果想根据数据来确定跳转的页面呢?
需要怎么做比较好一点。DeepLink 好像是一个不错的解决方案,在 AndroidManifest.xml 中,定义好 data 字段,标记好 scheme 、 host 等等,然后按照规则进行传递,这样也可以跳转到某些页面。
但是,这样真的方便吗?
我们需要在每个需要跳转的 Activity 上,设定好data?当然,现在 Github 上也有一些成熟的 Deeplink 的解决方案,只需要在为某个 Activity 设定 data ,然后所有 deeplink 的链接都跳转到这个 Activity 上,最后再由这个RouterActivity,去决定向那里跳转,并携带上参数。
那么还有别的方案吗?
二、Intent的toUri()
直到我发现 Intent 居然有个 toUri()
的方法,我就觉得有办法对 Intent 进行简单的序列化了。
从文档中可以看出,toUri()
方法可以将一个 Intent 转换成一个 URI ,其中包含了 action、categories、flags 等一些必要的参数。
那么文章开头的地方,那么 startActivity ,最终转换成 URI ,是什么呢?
仔细看,flag、compoent、putExtra 的数据,都被序列化成一个字符串了。
得到的这个 Uri ,如何使用呢?可以借助 Intent 的一个静态方法,parseUri()
将一个 Intent 的 URI ,转换成实际的 Intent 对象。