基类Activity的封装+对app所有activity的统一管理


转载请注明出处:(http://blog.csdn.net/qq_35071078/article/details/58585052


大家都知道,android app其实就是一堆activity来回的切换(虽然还有service,broadcast,但是运行在后台看不到)。学习了android一段时间了,自己也着手完成了一个项目,并参加完成了几个项目,虽然不是什么很叼的app,但是毕竟功能健全,业务逻辑清晰。那通过我这段时间的项目经验,给大家分享一个管理activity的方法吧生气

首先我们可以定义一个基类activity,之后所创建的所有activity都可以继承这个基类,好做统一化管理。然后我们可以创建一个Application,在Application里面定一个一个静态变量List<Activity>,关键就是这个变量。每当一个activity创建中后,就将这个activity实例添加到这个list里面,每当一个activityfinish后,就将这个activityremove掉。如果想一键退出app的话,就直接移除掉list里面所有的对象。这样特别方便做 一键退出,切换账号等功能。

下面奉上代码:

public class BaseActivity extends AppCompatActivity {
    //继承什么activty都可以,根据实际需求

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //当一个activty创建后就将其加入到list集合中
        ((MyApplication) getApplication()).addActivity(this);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //当被销毁后,将其移除
        ((MyApplication) getApplication()).finishSingle(this);
    }
}
public class MyApplication extends Application {

    //activity集合,用来同意管理activity,方便一键退出
    private List<Activity> activityList = new ArrayList<>();

    @Override
    public void onCreate() {
        super.onCreate();
    }

    /**
     * 添加activity
     * @param activity
     */
    public void addActivity(Activity activity) {
        activityList.add(activity);
    }

    /**
     * 移除某个activity
     * @param activity
     */
    public void finishSingle(Activity activity){
        activityList.remove(activity);
        if (!activity.isFinishing()) {
            activity.finish();
        }
    }

    /**
     * 移除所有的activity(通常会在一键退出的时候使用)
     */
    public void finishAll() {
        for (Activity activity : activityList
                ) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
        android.os.Process.killProcess(android.os.Process.myPid());
    }

    /**
     * 清楚掉除了自己之外的activity
     * 这个方法一般会用在,如果activity任务栈中已经存在了几个activty了,但是你想回到最底层的activty并且销毁掉之前所有的activty
     * 比如说 现在有4个activity A B C D,A是第一个activty,然后进行activity的跳转 A ->B ->C ->D,然后你想从D->跳到A,并且销毁掉B和C,那么可以在进入到A后,在A中调用此方法
     * 举个实际点的例子:你想做一个切换账号的功能,一般此功能都是在 个人中心 ->设置 ->退出当前登录,那么如果你直接进入到登录界面进行登录不做任何处理的话,之前的activty没有finish掉
     * ,gc(垃圾回收机)也不会回收这些内存,这样很容易引起内存泄漏(亲身经历)
     * @param activity
     */
    public void finishAllButNotMe(Activity activity){
        for (Activity ac : activityList
                ) {
            if (ac == activity){
                //如果是当前的activty,不做任何处理
            }else if (!ac.isFinishing()) {
                //如果不是,finish掉
                ac.finish();
            }
        }
    }
}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值