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

关于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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值