Android 切換系統語言後,重啟App
阿新 • • 發佈:2019-01-26
問題描述:App->改變系統語言->重進App後,最近的Activity會走onCreate()方法,然後App被殺掉;直到第二次進入App後,App會重啟
解決方案:App->改變系統語言->重進App後,最近的Activity走到onCreate()方法時,檢測系統語言是否改變,如果是,就重啟App。
LanguageUtil.class
package com.barry.common.util; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.text.TextUtils; import java.util.Locale; /** * 切換語言的工具類 * * @author : barry.huang * @time : 16/9/21 **/ public class LanguageUtil { private static final String LAST_LANGUAGE = "lastLanguage"; /** * 當改變系統語言時,重啟App * * @param activity * @param homeActivityCls 主activity * @return */ public static boolean isLanguageChanged(Activity activity, Class<?> homeActivityCls) { Locale locale = Locale.getDefault(); if (locale == null) { return false; } SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(activity); String localeStr = sp.getString(LAST_LANGUAGE, ""); String curLocaleStr = getLocaleString(locale); if (TextUtils.isEmpty(localeStr)) { sp.edit().putString(LAST_LANGUAGE, curLocaleStr).commit(); return false; } else { if (localeStr.equals(curLocaleStr)) { return false; } else { sp.edit().putString(LAST_LANGUAGE, curLocaleStr).commit(); restartApp(activity, homeActivityCls); return true; } } } private static String getLocaleString(Locale locale) { if (locale == null) { return ""; } else { return locale.getCountry() + locale.getLanguage(); } } public static void restartApp(Activity activity, Class<?> homeClass) { Intent intent = new Intent(activity, homeClass); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); activity.startActivity(intent); // 殺掉程序 android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } }
在基類BaseActivity的onCreate()方法裡呼叫LanguageUtil.isLanguageChanged(activity, homeActivityCls).
新增許可權
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> over.