2016-09-17 97 views
2

我有叫另外一个通过调用startActivity()的活动,一段时间后onSaveInstanceState(Bundle outState)叫我设置一个布尔valeu对onCreate(Bundle savedInstanceState)但是当这种方法被称为savedInstanceState来自空恢复。我已经在网上搜索了一个答案,但没有找到我的案例。的Android - savedInstanceState空当parentActivityName充满

这里的onSaveInstanceState方法:

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState = new Bundle(); 
     outState.putBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, true); 
     super.onSaveInstanceState(outState); 
    } 

onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setTitle(R.string.activity_main); 
    if (savedInstanceState!=null && savedInstanceState.getBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, false)){ 
     return; 
    } 
    //DO SOME STUFF 
} 

而这里的活动我AndroidManifest声明:

<activity android:name=".MainActivity" 
       android:screenOrientation="portrait" 
       android:configChanges="orientation|keyboardHidden"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

这就是所谓的活动:

 <activity android:name=".PhotoUserActivity" 
        android:screenOrientation="portrait" 
        android:configChanges="orientation|keyboardHidden" 
      android:parentActivityName=".MainActivity"> 
     </activity> 

如果我从第二个活动的声明中删除parentActivityName,并自己创建“后退按钮”,则第一个Activity的onCreate永远不会被调用。

感谢您的帮助!

+0

你有解决它?我有同样的麻烦:http://stackoverflow.com/q/41578258/1639556但我不创建nw捆绑实例。 –

+0

@LeosLiterak不幸的是,我用另一种方法来实现我的目标 –

回答

2

你不需要初始化outState变量,否则你将无法通过vallue。

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     //outState = new Bundle(); <-- Remove this 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(Constants.MAIN_ACTIVITY_STATE_RECREATED, true); 
    } 

outState Bundle由框架提供,通过初始化它,例如, new Bundle()如果它包含任何内容,那么您可能会在之前的Bundle上降低某些值。

总是建议在添加新值之前先拨打super.onSaveInstanceState(Bundle outState)

1

如果将应用程序的状态保存在包中(通常为非持久动态数据,其格式为onSaveInstanceState),如果需要重新创建活动(例如,方向更改),则可以将其传回至onCreate,以便您不要失去这个先前的信息。如果没有提供数据,则savedInstanceState为空。

...你 应该使用的onPause()方法,以任何持久性数据(如 用户编辑)写入存储。另外,方法 onSaveInstanceState(Bundle)在将活动置于 这样的背景状态之前被调用,允许您将活动中的任何动态 实例状态保存到给定的Bundle中,稍后在onCreate中收到 (Bundle )如果活动需要重新创建。 有关如何将流程的生命周期与其托管的活动绑定的详细信息,请参阅流程生命周期部分。注意 ,因为后者不是 生命周期回调的一部分,所以在onPause()而不是 onSaveInstanceState(Bundle)中保存持久数据非常重要,因此在其文档中描述的 在每种情况下都不会被调用。

source