当接入的Sdk里有大量的activity时,为了启动这些activity,你必须挨个在Manifest里进行注册,既麻烦,又耦合。为了简化配置文件,用这种简单代理模式即可实现。
这种代理模式的思想是注册一个唯一的Activity,其他的Activity以这个为基础,开启关闭暂停恢复等生命周期和各种方法都是用这个基本的代理Activity,我们称之为ProxyActivity,而其他使用这个代理Activity的就可以自己创建了,但是要注意的是,这些Activity是借用了这个代理Activity的生命周期,方法等,所以直接使用像setContentView()方法是行不通的,要用ProxyActivity的上下文才能使用,步骤如下:
1.在主工程的Manifest里注册这个ProxyActivity
<activity android:name="com.jackryannn.mylibrary.ProxyActivity"/>
2.在Sdk里创建ProxyActivity,为了已最少的代码来展示,只写了两个方法,一个是getActivity(),用来获取这个ProxyActivity的上下文,因为很多方法比如新建一个TextView都需要当前ProxyActivity的上下文。另一个方法是start(),用来启动一个继承ProxyActivity的Activity,代码如下:
public static void start(Context context , ProxyActivity activity){
Intent intent = new Intent(context,activity.getClass());
context.startActivity(intent);
}
public Activity getActivity(){
return this;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
3.在Sdk里创建继承代理Activity的Activity,注意它并不是真正的Activity,而是使用了代理Activity的躯壳,为了区分,我在这个Activity里添加了一个TextView。
public class JackActivity extends ProxyActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.getActivity().setContentView(R.layout.activity_jack); } }
4.最后就是在主工程里启动这个JackActivity了。
ProxyActivity.start(MainActivity.this, new JackActivity());
就这么简单。