基类Activity|SquirrelNote

字数 297阅读 30

系列文章:
Activity的4种启动模式及使用场合|SquirrelNote
Android中Activity之间的数据传递|SquirrelNote
Android中启动Activity活动的另一种写法|SquirrelNote
基类Activity|SquirrelNote

如果应用程序或者业务逻辑有很多公用的逻辑或者公用的方法,我们可以把它抽取出来,做成一个基类BaseActivity。

Activity基类的设计

定义一个BaseActivity继承Activity,让APP中所有的Activity继承BaseActivity

在BaseActivity中封装了哪些方法?
在生命周期中保存Context对象,保存Activity栈:
活动需要一个注销或者退出的功能该怎么办?
解决思路:使用一个集合类对所有的活动进行管理,具体实现如下

/**
 * 创建者     yangyanfei
 * 创建时间   2017/11/10 上午 10:25
 * 作用         活动管理器
 * 定义一个类对所有的活动进行管理
 * <p/>
 * 版本       $$Rev$$
 * 更新者     $$Author$$
 * 更新时间   $$Date$$
 * 更新描述   ${TODO}
 */
public class ActivityCollector {
    /**
     * 用来保存Activity的List集合
     */
    public static List<Activity> activities = new ArrayList<>();

    /**
     * 向List集合中添加一个活动
     * @param activity
     */
    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    /**
     * 从List集合中移除一个活动
     * @param activity
     */
    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    /**
     * 将List集合中存储的活动全部销毁
     */
    public static void finishAll() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()){
                activity.finish();
            }
        }
    }
}
public class BaseActivity extends Activity {

    private Context mContext;

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);

        //保存Context对象
        mContext = this;
        
        //保存Activity栈
        setActivityState(this);
    }
    
    public static void setActivityState(Activity activity) {
        // 设置App只能竖屏显示
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        //将正在创建的活动添加到活动管理器中
        ActivityCollector.addActivity(activity);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //将一个马上要销毁的活动从活动管理器里移除
        ActivityCollector.removeActivity(this);
    }
}

如果想在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法,例如:

btn.setOnClickListener(new OnClickListener()){
  @Override
  public void onClick(View v){
    ActivityCollector.finishAll();
  }
}

执行共有的UI操作,比如显示Toast,显示Progress,显示Dialog等等:

public void showToast(String text) {
    if (text != null && !text.trim().equals("")) {
        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
    }
}

// dip转px
public static int dip2px(Context context, float dipValue) {
    float scale = context.getResources().getDisplayMetrics().density;
    return (int) (scale * dipValue + 0.5f);
}

以上是根据我的一些理解,做的总结分享,旨在抛砖引玉,希望有更多的志同道合的朋友一起讨论学习,共同进步!