理解 new Intent(Context, Class)

Intent 有一个构造方法是 Intent(Context, Class),初看不太容易明白第一个参数的作用。第二个参数倒是好猜测,就是用来实例化一个新组件呗。

翻了翻文档,发现文档里对第一个参数 Context 的解释是用于获得 package name,以便找到第二个参数 Class 的位置。这下更费解了,既然把 Class 传递进去了,为什么还要通过 Context 来找它?这不是多此一举么?

再接着我翻了源代码,Intent 这个构造方法的实现只有一句代码:
mComponent = new ComponentName(packageContext, cls);

而这个 ComponentName 的构造方法是这样的:
    public ComponentName(Context pkg, Class<?> cls) {
        mPackage = pkg.getPackageName();
        mClass = cls.getName();
    }

完了。完全搞不明白这是在干嘛,传进来两个对象,结果只保留了从它们当中取出来的字符串,其它信息全都丢弃了……

最后翻了一下书,才算搞明白:即便在同一个应用当中,启动新的 Activity 也是靠系统级别的 ActivityManager 来操作的,ActivityManager 在获得能够定位具体的 Activity 的信息(应用的包名和目标的完整类名)之后,找到那个 Activity 并实例化它。实际上,之前对第二个参数作用的猜测都是错的。

但是这个构造方法让我来写的话,我会把两个参数换成字符串,明明只需要一个属性的地方,传了两个对象进去,有点过度封装的味道。使用者反而容易迷糊。比较好奇第一次接触这个方法跟我一样被搞晕的人有多少。

猜你喜欢

转载自yuan.iteye.com/blog/2234168