关于Android程序杀掉之前所有Activity(可用于登陆后被顶掉、更改应用内语言)

来源:互联网 发布:盛势网络剧视频bili 编辑:程序博客网 时间:2024/06/05 16:50

关于Android程序杀掉之前所有Activity(可用于登陆后被顶掉、更改应用内语言)

这里以更改应用内语言为例:
可以有两种方式:
第一种,重新设定下应用内语言,不过这个方法要写在程序的第一个activity里面(也就是AndroidManifest.xml里面的LAUNCHER这个页),而且这个activity不能被finish。

先在LAUNCHER的activity里加入下面这个方法。

public static void settingLanguage(Locale locale) {        Configuration config = AppApplication.getContext().getResources().getConfiguration();// 获得设置对象        Resources resources = AppApplication.getContext().getResources();// 获得res资源对象        DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。        config.locale = locale; // 简体中文        config.setLayoutDirection(locale);        resources.updateConfiguration(config, dm);    }

然后在需要改语言的那个页面加入如下代码

locale = new Locale(language);                LanuncherActivity.settingLanguage(locale);                Intent intent = new Intent(thisActivity.this, LanuncherActivity.class);                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                startActivity(intent);                finish();

这样就可以把app内语言改变了,这种方法是利用

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

这句代码将栈内在LAUNCHER的activity之上的所有activity都出栈,从而从新加载新的语言,这种方法缺点也很明显:1、LAUNCHER页必须保证一直不能被finish。2、如果activity的加载模式有singleTop,singleTask,这种方法就不太好用了。

下面介绍第二种方法:

建立一个class继承 Application在里面加入下面代码:

public void addActivity(Activity activity) {        activityList.add(activity);    }    public void finishActivity() {        if (activityList.size() == 0) {            activityList.clear();        }        for (Activity activity : activityList) {            activity.finish();        }    }

之后在所有(一定是所有)activity 执行 onCreat()方法的时候都调用一次Application里的add()方法 ,把当前的activity穿进去,之后在你切换语言(也可以是强制下线)的同时,调用Application里的finishActivity()方法,也可以将所有开启的activity都finish掉,缺点是比较麻烦,每个activity里都要添加add()方法。优点是不管activity是什么启动模式都可以完全finish。

0 0
原创粉丝点击