转载请注明出处:(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(); } } }}