为什么Bundle对象在onCreate()上始终为空?

我正在尝试进入Android编程,我从一本书中拿了一些例子。 在这些例子中请求放置下面的代码:

public class ExemploCicloVida extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Log.i(TAG, getClassName() + " onCreate() called on: " + icicle); TextView t = new TextView(this); t.setText("Exemplo de ciclo de vida de uma Activity.\nConsulte os logs no LogCat"); setContentView(t); } } 

我想知道为什么Bundle对象在这种情况下总是为空。

  • “activity.onCreate()”方法被多次调用是否正常?
  • 必须在super.onCreate上添加内容错误之前调用requestFeature()
  • Android onCreate或onStartCommand启动服务
  • 在onPause中保存活动状态
  • 如何使通知恢复并不重新创build活动?
  • Android - 活动构造与onCreate
  • Fragment中的onCreate()和onCreateView()生命周期方法有什么不同?
  • “onCreate()之前的系统服务不可用于活动()”错误消息?
  • 如果没有以前保存的状态,该包将为空。

    这是在Activity API文档中提到的。

    在我的情况下,原因是具体的活动没有清单文件中声明的主题。

    要解决这个问题,打开AndroidManifest.xml,点击应用程序,在应用程序节点中select崩溃的活动,并在属性的主题字段添加主题。 就我而言,是的

     @style/Theme.AppCompat.Light.DarkActionBar 

    但是您可以从您的其他活动中复制主题。

    PS:我知道这是一个老问题的答案,但是我在寻找修复方法时偶然发现了这个问题,并且没有find一个可行的解决scheme,所以这可能会帮助其他人。

    运行此代码并按Ctrl + F11旋转屏幕。 该包不会为空。

     @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (savedInstanceState != null) { Toast.makeText(this, savedInstanceState.getString("s"), Toast.LENGTH_LONG).show(); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("s", "hello"); } 

    onSaveInstanceState(Bundle)将被调用。 然后,创build活动对象,并使用非null Bundle savedInstanceState调用onCreated(Bundle)

    我想你想阅读进入你的活动的参数。 使用这个function:

     protected String getStringExtra(Bundle savedInstanceState, String id) { String l; l = (savedInstanceState == null) ? null : (String) savedInstanceState .getSerializable(id); if (l == null) { Bundle extras = getIntent().getExtras(); l = extras != null ? extras.getString(id) : null; } return l; }