-
Notifications
You must be signed in to change notification settings - Fork 150
BeamAppCompatActivity&BeamFragment
最基本的双向注入Activity与Fragment。无任何其他任何功能。建议使用BeamBaseActivity而不是直接使用BeamAppCompatActivity。
需要填上Presenter泛型与Presenter的注解
@RequiresPresenter(QuestionPresenter.class)
public class QuestionActivity extends BeamAppCompatActivity<QuestionPresenter>{
}
##双向注入
在Activity的onCreate()
一开始便会根据注解所填presenter的类实例化一个Presenter。并将自己注入给presenter。然后保持对presenter的引用。所以可在任意生命周期内使用getPresenter()
来获取QuestionPresenter的引用。调用presenter的方法。
##Activity的意外退出
Activity在很多情况下会意外退出。比如反转屏幕,内存不足。这不应该影响Presenter的存在。所以一个静态类PresenterMananger也会保持presenter引用。当Activity意外销毁时。Presenter不会被回收,当Activity被还原时会根据在savedInstanceState中存的PresenterID找到自己对应的presenter。重新绑定。
而当Activity主动销毁时。PresenterMananger也会释放对presenter的引用。Presenter与Activity都会被回收。
##生命周期注入
对于比如友盟数据统计等SDK会要求生命周期统计(在所有Activity的onResume()``onPause()
添加代码)。如果你想用一个顶级Activity来代理所有Activity。在这个框架里有众多类型Activity不太容易实现。
解决方式
将你需要将执行的操作注入到每个Activity的生命周期中。
先自己实现ActivityLifeCycleDelegate
这个类.在里面有Activity的大部分回调。
Beam.setActivityLifeCycleDelegateProvider(new ActivityLifeCycleDelegateProvider() {
@Override
public ActivityLifeCycleDelegate createActivityLifeCycleDelegate(Activity activity) {
return new MyActivityDelegate(activity);
}
});
一旦你填写了你的Delegate的class。每个Activity都会持有你的Delegate实例。并在相应的生命周期回调你的方法。
在你的ActivityLifeCycleDelegate
中使用getContext()
获取Context。
示例
public class MineActivityLifeCycleDelegate extends ActivityLifeCycleDelegate {
public ActivityDelegate(Activity act) {
super(act);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
JUtils.Log("onPause"+getContext().getClass().getName());
}
@Override
protected void onPause() {
super.onPause();
JUtils.Log("onPause");
}
@Override
protected void onResume() {
super.onResume();
JUtils.Log("onResume");
}
}