在郭霖老师的《第一行代码2》的2.6.3 启动活动的最佳写法 中,有一些部分看得有些疑惑,经过整理思路如下:
书中描述:
假设SecondActivity需要两个很重要的字符串,你在FirstActivity里面使用以下方法跳进去
Intent intent=new Intent(FirstActivity.this,SecondActivity);
intent.putExtra(“param1”,”data1”);
intent.putExtra(“param2”,”data2”);
startActivity(intent);
这样写,可能会遇到对接的问题,比如SecondActivity不是你开发的,里面有一万行代码,你负责的部分需要启动SecondActivity这个功能,但是你不清楚启动SecondActivity需要哪些数据,比如需要10个数据(你不知道,也没问人没看代码),而你只传递了两个,就会导致异常(要启动SecondActivity,你必须知道SecondActivity的getIntent()
方法后面需要多少数据,少一个都会导致程序崩溃),郭霖老师说,使用下面的方法,就能不看代码,不问人,来避免出现这种异常
把别人写的SecondActivity打开,在前面加上一个函数,这个函数的内容如下
public static void actionStart(Context context,String data1,String data2){
Intent intent= new Intent(context,SecondActivity.class);
intent.putExtra(“param1”,data1);
intent.putExtra(“param2”.data2);
context.startActivity(intent);
}
书中描述:
这样加一个函数,SecondActivity中的10个数据就可以通过actionStart()中传递的2个字符串全部拿过来了???
然后在FirstActivity中使用一句话
SecondActivity.actionStart(FirstActivity.this,”data1”,”data2”);
就可以启动第二个应用,并且传递10个数据了?
自己编写每个活动的添加这个方法没问题,但是现有的语境下还是没解决“SecondActivity是别人写的,而自己在不需要询问的情况下清晰的知道SecondActivity需要传递哪些数据”的问题。
这样理解肯定是有问题的,如果我们不断章取义,从郭老师最后的那句“可以节省不少同事过来询问你的时间”,那么我们可以换个角度重新描述一遍。
假设SecondActivity是你开发的,但是新来的同事不知道这个活动需要传递哪些数据才能调用它,如果传递数据不对有可能会崩溃,所以你需要专门在SecondActivity写一个actionStart方法,把它置顶,你要告诉新来的同事,这个活动需要传输的数据有哪些,让他按照这个函数来写FirstActivity需要传递的数据,在FirstActivity中使用
SecondActivity.actionStart(FirstActivity.this,”data1”,”data2”,……,”data10”);
来启动SecondActivity,并传递10个数据,每个活动都这么写,并且让大家都规范这么写,就可以使传递数据看起来更集中了,避免程序崩溃的可能性。