搜索了一下相關的資料,http://blog.sina.com.cn/s/blog_629712650101a1o3.html 說是因爲4.2中,app配置了configChanges locale屬性後,當app處於後臺,並沒有finish時,如果改變語言,並不會在resume時調用Activity重寫的onConfigurationChanged函數。
原因是,4.2增加了一個layoutDirection屬性,當改變語言設置後,該屬性也會成newConfig中的一個mask位。所以ActivityManagerService(實際在ActivityStack)在決定是否重啓Activity的時候總是判斷爲重啓。
當在android:configChanges 中同時添加locale和layoutDirection時,纔會發生app期望的事情。
所以解決方法是,在manifest.xml的每個activity中添加:
android:configChanges="locale|layoutDirection"
我是添加上面這句代碼就解決了。
別人的解決方法:
切換語言後避免Activity重啓的解決辦法就是下面:
android:configChanges="locale|layoutDirection|keyboard" //缺一不可,多是可以的
我的代碼裏原本就有keyboard這個標籤,所以我不確定是否需要添加,不過添加也無害。
記錄一下。