相信Android开发者都会知道,在应用内跳转页面,我们肯定会用到 Intent。使用 Intent 跳转页面有显式跳转和隐式跳转两种方式。
Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
startActivity(intent);
典型的显式跳转就如同上面的代码一样,如果需要携带数据的话,我们也有两种方式。一方面我们可以调用 Intent 的 putExtra 系列方法,通过键值对的方式把数据传递过去。Intent 支持传递的数据包括基本类型数据、字符串、序列化以及各自的数组,有意思的是 Intent 支持 Parcelable数组 但不支持 Serializable数组。然后在跳转的页面通过相应的 get方法 把数据拿出来即可。
另一方面,我们也可以用 Intent 的 setData方法 将统一资源标识符Uri传递过去,然后在接收端解析 Uri 来拿出数据。对于一个 Uri,主要由以下几部分组成:
scheme://host:port/path?query
相应地,我们便能从 Uri 中把各个部分的信息拿出来。
而隐式跳转则是通过 Intent 的 action 来实现。典型的便是我们在桌面点击了应用的图标,然后应用启动进入我们的第一个页面。相信大家都知道对于应用自动的第一个页面,我们在 AndroidManifest.xml 文件中对 Activity 注册时,会有这么一段代码。
实际上应用从点击图标到启动第一个页面的过程相当复杂,如果大家有兴趣的话可以去看老罗的博客:
Android应用程序启动过程源代码分析
http://blog.csdn.net/luoshengyang/article/details/6689748
从源代码的分析来看,桌面图标保存了相应应用的启动 intent,该 intent 保存了 AndroidManifest.xml 的信息。因此我们自定义隐式启动页面时,只需要在 AndroidManifest.xml 中相应的 Activity 配置相应的 action 信息,然后调用的时候设置相应的 action 便可启动相应 Activity。
比如我们之前开发应用时,想要调用系统拨打电话应用,我们并不知道拨打应用 Activity 的具体信息,所以只有通过隐式方式来调用。