屏幕旋转后不会调用onSaveInstanceState

Vor*_*ier 25 java android android-fragments android-activity

我知道有许多问题在关于保存事件状态,但我无法找到问题的答案.

我有一个扩展AppCompatActivity的活动; 此活动使用3个片段,它有一个变量'int currentStep'来跟踪正在显示的片段.在onSavedInstanceState方法中,我将currentStep变量存储在bundle中,然后在onCreate方法中我将其恢复.

public class MainActivity extends AppCompatActivity {
    private final String CURRENT_STEP_TAG = "current_step";
    private int currentStep;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pedido);        

        if(savedInstanceState == null) {
            loadFirstFragment();
        } else {            
            currentStep = savedInstanceState.getInt(CURRENT_STEP_TAG);
            if(currentStep == 2){
                //Do some stuff...
            }
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        Log.d("deubg", "--------onsaveinstancestate--------");
        outState.putInt(CURRENT_STEP_TAG, currentStep);
        super.onSaveInstanceState(outState, outPersistentState);
    }

 ...

}
Run Code Online (Sandbox Code Playgroud)

问题是onSavedInstanceState在屏幕变化时不会被调用,并且根据谷歌文档,它应该.消息"-------- onsaveinstancestate --------"未在控制台中显示.但是,onCreate方法中的Bundle savedInstanceState在屏幕旋转后为非null,但它没有int'sturrentStep'.

我尝试了很多东西:为ActionBarActivity更改了AppCompatActivity,将super.onSavedInstanceState的调用移到了不同​​的位置,试图存储其他变量; 但无论我做什么,该方法都不会执行.

另外,我的清单中没有android:configChanges.

我的应用程序是针对sdk版本22,buildToolsVersion 22.0.1编译的

Mar*_*ski 68

除非你的应用程序在Android或更新版本的Lollipop(API21)版本上运行,否则你的应用程序

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
Run Code Online (Sandbox Code Playgroud)

被称为它根本不会在较早版本的平台比21的存在是为了支持预API 21级的设备,你必须,而不是上面,覆盖下面的方法:

public void onSaveInstanceState (Bundle outState);
Run Code Online (Sandbox Code Playgroud)

这也适用于API 21+,因此您不需要覆盖这两种方法(除非您知道需要处理PersistableBundle新的提议).

查看文档.