关于activity的使用规范小总结

时间:2021-01-13 20:06:31

activity,在开发过程中是使用率最高的组件了,总结几个小的规范,在开发过程中会更加的舒畅,是的,舒畅的开发代码,就是这样一种感受。。。

1,最快速的知道目前所在的活动是哪一个活动类
接手别人的代码,在熟悉代码的过程中,这一个需求是最迫切的,如何做到呢?very easy,但是也是有个前提和过程的:

比如创建一个demo,
首先需要创建一个基础活动BaseActivity,让他extends Activity,以后所有的 activity都直接继承这个BaseActivity。在BaseActivity的onCreate()方法中,加一条log语句:Log.e(“baseActivity”,getClass.getSimpleName());这样一来,每当有新的活动被创建,就会打压一条log语句,并且将这个子类活动的名字打印出来,看log一目了然。

2,随时随地,可以方便的退出程序
 一般的程序都是一路的activity接着activity跳转下去,如果,线性的一个个跳转,我跳转到最后一个activity了,现在想退出程序该如何做呢?
 直接System.exit(0),或者System.exit(1),强制杀掉程序,其实这样并不完美,为什么呢,
 前一刻还都在使用,系统将这一路的activity对象统统的入栈,进行管理了,后来突然说要将这个栈给直接销毁掉,如果我是这个栈,我就想削你了,当然,从逻辑的角度来说,activity逐个入栈了,我们也是理性的清晰的,将其一个个出栈,销毁掉,步骤清晰,逻辑清晰,不会存在什么泄露隐患。
 擦擦擦,说这么多,到底该怎么做呢,拿一个方案出来啊?
 思路很简单,只需要使用一个专门的集合类对所有的活动进行管理就可以了。

上代码

创建一个ActivityCollector类作为活动的管理器:
package com.freedev.mydemo;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

/**
* Created by yujie.zhang on 2016/12/22.
*/

public class ActivityCollector {
public static List activities = new ArrayList<>();

/**
* 增加
*
* @param activity
*/
public static void addActivity(Activity activity) {
activities.add(activity);
}

/**
* 移除
*
* @param activity
*/
public static void removeActivity(Activity activity) {
activities.remove(activity);
}

/**
* 清空
*/
public static void finishAll() {
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}

}
在这个活动管理器中,通过一个list来管理活动,在所有activity的基类 BaseActivity中,在onCreate中调用ActivityCollector.addActivity(this);加入管理器的list中,在onDestroy()方法中调用ActivityCollector.removeActivity(this);这样一来就把当前的activity实例加入了这个管理器中,当我们再任何一个activity中,当想退出应用的时候,直接调用clear方法,ActivityCollector.finishAll();就销毁了list中的所有活动实例了,就达到了安全退出的目的;

3,启动活动的最佳方式
 其实这个总结就提现了一点,封装的概念,activity之间跳转,需要几行代码,如果 再通过intent传几个参数,那就更多了几行了,我们完全可以将这些代码,封装成一个方法,加上注释,这样一来,阅读代码非常方便整洁,启动跳转的时候,也就只需要调用这个方法,传入相应的参数就可以了,一定程度上达到了解耦,解冗余的目的,让代码非常美观,结构非常整洁。