美文网首页
基类Activity|SquirrelNote

基类Activity|SquirrelNote

作者: 跳动的松鼠 | 来源:发表于2017-11-28 10:28 被阅读19次

    系列文章:
    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);
    }
    

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

    相关文章

      网友评论

          本文标题:基类Activity|SquirrelNote

          本文链接:https://www.haomeiwen.com/subject/imgvmxtx.html