现在的位置: 首页 > 移动开发 > 正文

Android系统切换语言的时候APP无法更新资源文件的解决方法

2018年09月19日 移动开发 ⁄ 共 1459字 ⁄ 字号 评论关闭

你的APP支持多语言环境,假如它正在后台运行,此时用户去更换系统语言,等系统语言换好后直接从后台打开它,此时用户会发现你的界面语言没有和系统语言保持一致;为什么?主要是界面资源没有重新加载

如果你是属于自己在APP内设置语言切换,那么就可以直接在你设置切换的那个activity里做处理,重新启动一次该activity就可以了,但是如果你的APP和我类似本身是没有切换语言功能的,只是跟随系统的,那么你不可能在所有的activity里处理吧!所以我这里就直接在application中重新启动一次app就可以解决更新资源问题了

我们都知道在Application是Android的第一入口,那么一旦系统切换语言,就会触发它的onConfigurationChanged()方法,那么重新启动我们就直接在这个方法中处理,此处的finishActivity();方法是关闭掉所有的activity,那么在BaseActivity里就需要执行MyApp.getInstance().addActivity(this);

public class MyApp extends Application{
    private static MyApp instance = null;
    private List<Activity> activities =new ArrayList<Activity>();
    public void addActivity(Activity activity){ 
        activities.add(activity); 
    }
    public void finishActivity() {
        for (Activity activity : activities) {
            activity.finish();
        }
    }
    public static MyApp getInstance() {
        if (instance == null) {
            instance = new MyApp();
        }
        return instance;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        instance = this;
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);
        //配置改变触发此方法
        finishActivity();//语言切换退出
        //最开始我是直接用的下面的方法,测试的时候发现如果app启动了多个activity的时候这个执行这个方法会导致app多重启几次,最后用批量关闭activity解决了
        //System.exit(0);
        //android.os.Process.killProcess(android.os.Process.myPid());   
    }
}

抱歉!评论已关闭.