Android-打造无敌解耦的BaseActivity

本文出自Zone的博客,如需转载请标明出处,尊重原创谢谢 博客地址:https://luhaoaimama1.github.io/2016/03/23/BaseActivity/

封装库:zone-sdk 设计模式:观察者模式 目的:解耦,各司其职。拍照等涉及onActivityResult的封装

逻辑图

BaseActivity

ActivityKinds(观察者的基类): 在使用的BaseActivity注册ActivityKinds或者移除不必要的ActivityKinds

专注:onCreateonResumeonActivityResultonPauseonDestroy

名字功能
CollectionActivityKind收集所有Activity用的
FeaturesKind专门处理关于onActivityResult的
ScreenSettingKindsetNoTitle,setFullScreen的
SwipeBackKind左滑退出Activity用的 集成别的项目~ xml额外的配置,参考地址

考虑兼容(简称BaseActivity)分成三块:BaseActivity BaseAppCompatActivity BaseFragmentActivity

BaseActivity里的主要工作

名字功能
updateKinds在这里 移除与注册 ActivityKinds

ActivityKinds范例:

 public class StatKind extends ActivityKinds {
     @Override
     public void onResume() {
         super.onResume();
         //百度统计
         StatService.onResume(activity);
         //jpush
         JpushUtils.Activity.resumePush(activity.getApplicationContext());
     }
     @Override
     public void onPause() {
         super.onPause();
         StatService.onPause(activity);
         JpushUtils.Activity.stopPush(activity.getApplicationContext());
     }
 }

BaseActivity移除不必要的SwipeBackKind 功能,注册StatKind;

public abstract class DBaseAppCompatActivity extends BaseAppCompatActivity {
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
    }
    @Override
    public void updateKinds() {
        mKindControl.remove(SwipeBackKind.class);
        mKindControl.put(new StatKind());
    }
}

FeaturesKind

观察者模式:

ExtraFeature(观察者的基类):专注:init(onResume中使用),onActivityResult,destory

RequestCodeConfig(所有ExtraFeature的Code声明):其中的START_CODE(默认1000开始)可以修改,而进行整体code偏移 主要是怕碰到别的类似开源项目code重复导致不必要的问题;

名字功能
Feature_Pic拍照功能与相册选择功能(如果写建议参考这个)
Feature_SystemClip系统裁剪(demo 让我删除了.)
Featrue_CustomCamera自定义相机(demo 没有. 很久以前的了就不给demo了~)

Tips:返回值的方法要抽象,这样就不会忘记写。 剩下的方法就可以public不抽象了~

Activity中拍照的使用范例:

声明后 注意 把拍照的功能添加到FeaturesKind里面 mKindControl.get(FeaturesKind.class).addFeature(feature_Pic);

     @Override
    public void updateKinds() {
        super.updateKinds();
        feature_Pic = new Feature_Pic(this) {
            @Override
            protected void getReturnedPicPath(String path) {
                System.out.println(path);
                Intent intent = new Intent(Photo_Shot_MainActivity.this,ShowPicActivity.class);
                Uri uri = Uri.parse(path);
                intent.setData(uri);
                startActivity(intent);
            }
        };
        mKindControl.get(FeaturesKind.class).addFeature(feature_Pic);
    }

然后调用此方法就好了~ feature_Pic.openCamera(); feature_Pic.openPhotos();

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.shot:
            feature_Pic.openCamera();
            break;
        case R.id.photo:
            feature_Pic.openPhotos();
            break;
        }
    }