當接入的Sdk里有大量的activity時,為了啟動這些activity,你必須挨個在Manifest里進行注冊,既麻煩,又耦合。為了簡化配置文件,用這種簡單代理模式即可實現(xiàn)。
這種代理模式的思想是注冊一個唯一的Activity,其他的Activity以這個為基礎,開啟關閉暫?;謴偷壬芷诤透鞣N方法都是用這個基本的代理Activity,我們稱之為ProxyActivity,而其他使用這個代理Activity的就可以自己創(chuàng)建了,但是要注意的是,這些Activity是借用了這個代理Activity的生命周期,方法等,所以直接使用像setContentView()方法是行不通的,要用ProxyActivity的上下文才能使用,步驟如下:
1.在主工程的Manifest里注冊這個ProxyActivity
<activity android:name="com.jackryannn.mylibrary.ProxyActivity"/>
2.在Sdk里創(chuàng)建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里創(chuàng)建繼承代理Activity的Activity,注意它并不是真正的Activity,而是使用了代理Activity的軀殼,為了區(qū)分,我在這個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());
就這么簡單。