在Activity中调用recreate()会导致“致命信号11”

时间:2014-06-14 07:43:40

标签: android android-fragments

每当用户更改应用程序语言时,我都会使用此代码重新创建活动:

public class MyActivity extends Activity implements OnSharedPreferenceChangeListener {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals("language"))
            recreate();
    }
}

这段代码适用于任何没有片段的活动。但是,如果我的活动包含一个或多个片段,则在从Fatal Signal 11 (SIGSEGV)返回并且在onSharedPreferenceChanged()第二次调用之前,会立即抛出onCreate()。谁能告诉我我做错了什么?

我目前正在OSX Mavericks上使用ADT build v 22.6.2 - 1085508针对SDK版本19进行编译。

1 个答案:

答案 0 :(得分:2)

您必须在onPause或onStop中取消注册您的侦听器:

@Override     
protected void onStop() {         
    super.onStop();
    PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);    
}