Skip to content

BeamAppCompatActivity&BeamFragment

Jude edited this page Oct 7, 2015 · 9 revisions

最基本的双向注入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的大部分回调。
life

    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");
    }
}
Clone this wiki locally