android activity的关闭处理的几种方式

 我来答
机器1718
2022-07-26
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
项目中我们往往要用到关闭程序时销毁所有的activity,而且这也是面试经常遇到的问题,退出程序的方式也有好几种,一下是一些处理关闭程序的方法:

1.最简单的方式就是使用系统的方法exit(0),这是最简单粗暴的方式,强制程序退出,但是这种方法针对部分机型有可能不太好使,退出时有可能出现程序崩溃的弹出框,或者程序会重新启动,这对用户体验来说不是很好。

2.抛出异常强制退出,这种方法的使用对用户体验来说简直就是灾难,所以就不要用这种方式了。

3.使用广播的方式通知activity进行关闭,这种方式也有人在用,大家可以自行百度下,我主要介绍下面这种方式。

4.使用application,在application中创建activity集合,创建添加以及删除activity的方法,并且在BaseActivity中的生命周期中调用这些方法,在使用的时候调用BaseApplication的方法,这也是目前最常用的方法,但是这种在BaseActivity中添加activity的方法也有一个问题,那就是当你要使用第三方的BaseActivity的时候,一个还好你可以继承,那如果要使用两个第三方的BaseActivity呢, Java 本身是单继承的,所以就会导致activity关闭不全了。那么这个问题的解决就要依靠一接口: ActivityLifecycleCallbacks ;这是Application中声明的一个接口,其内容如下:

@Override

public voidonActivityCreated(Activity activity,Bundle bundle) {

Log.e("onActivityCreated---","is running"+"--"+activity.getLocalClassName());

}

@Override

public voidonActivityStarted(Activity activity) {

Log.e("onActivityStarted---","is running"+"--"+activity.getClass().getCanonicalName());}

@Override

public voidonActivityResumed(Activity activity) { Log.e("onActivityResumed---","is running"+"--"+activity.getClass().getCanonicalName());}

@Override

public voidonActivityPaused(Activity activity) { Log.e("onActivityPaused---","is running"+"--"+activity.getClass().getCanonicalName());}

@Override

public voidonActivityStopped(Activity activity) { Log.e("onActivityStopped---","is running"+"--"+activity.getClass().getCanonicalName() );}

@Override

public voidonActivitySaveInstanceState(Activity activity,Bundle bundle) { Log.e("onActivitySaveInstanceState---","is running"+"--"+activity.getPackageName());}

@Override

public voidonActivityDestroyed(Activity activity) { Log.e("onActivityDestroyed---","is running"+"--"+activity.getPackageName());}

大家可以看到这些方法名采用的都是英语中的过去式命名,其意大家看方法名也应该懂了,就是activity执行过得生命周期都会在这里调用,想要这些方法执行要调用

registerActivityLifecycleCallbacks(this);

这个方法,记得一定要调用啊,还有请记住这些回调是针对所有的Activity哦,所以我们就可以使用这样的方式去对activity进行关闭或者其他操作了。下面有一种存放activity的方式,喜欢的可以使用:

private staticWeakReferencecurAct;

private staticWeakHashMapacList=newWeakHashMap<>();

/***设置当前activity**

@paramact*/

public static voidsetCurActivity(Activity act) {curAct=newWeakReference<>(act);acList.put(act, null);}

/***获取想要的activity*@return*/

public staticActivitygetCurActivity() {if(acList==null||acList.isEmpty())return null;WeakReference wr =curAct;if(wr !=null) {returnwr.get();}return null;}

/***清理activity*@paramact*/

public static voidclearCurActivity(Activity act) { Object remove =acList.remove(act);if(remove !=null&& TextUtils .equals(remove.getClass().getSimpleName(),curAct.get().getClass().getSimpleName())) {//TODO You want to do something.}}/***销毁所有的activity*/public static voiddestroyAllActivity() {if(null!=acList&& !acList.isEmpty()) { Object[] keys =acList.keySet().toArray();for(Object obj : keys) { Activity act = (Activity)obj;if(act !=null) { act.finish();} } }}

/***关闭某个activity*@paramactivity*/

public static voidcloseActivity(String activity) {if(null!=acList&& !acList.isEmpty()) { Object[] keys =acList.keySet().toArray();for(Object obj : keys) {if(obj !=null&& activity !=null&& TextUtils.equals(obj.getClass().getSimpleName(),activity)) { Activity act = (Activity)obj;act.finish();} } }}

下面是CSDN地址: 原文链接
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式