Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时调用onRestoreInstanceState?(安卓kitkat)_Java_Android - Fatal编程技术网

Java 何时调用onRestoreInstanceState?(安卓kitkat)

Java 何时调用onRestoreInstanceState?(安卓kitkat),java,android,Java,Android,为了查看是否调用了onRestoreInstanceState,我编写了以下java代码 package com.MCHAppy.demostate.app; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; public class MainActivity extends ActionBarActivity { private i

为了查看是否调用了onRestoreInstanceState,我编写了以下java代码

package com.MCHAppy.demostate.app;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;


public class MainActivity extends ActionBarActivity {
    private int visiters=0;

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

     }

     @Override
     protected void onResume() {
         super.onResume();
          visiters++;
         Log.d("Test","Resumed");
     }

     @Override
       protected void onSaveInstanceState(Bundle outState) {
           super.onSaveInstanceState(outState);
           outState.putInt("visiters",visiters);
           Log.d("Test",visiters+" visiters  was saved ");
       }

     @Override
     protected void onRestoreInstanceState(Bundle savedInstanceState) {
           super.onRestoreInstanceState(savedInstanceState);
           visiters=savedInstanceState.getInt("visiters");
           Log.d("Test",visiters+" visiters was restored");
     }
 }
当我点击主页图标时,我在Logcat中看到了这个

  06-09 17:09:58.240    1316-1316/com.MCHAppy.demostate.app D/MCHAppy﹕ 1 visiters  was saved
06-09 17:58:13.230    1316-1316/com.MCHAppy.demostate.app D/MCHAppy﹕ Resumed
当我回到我的活动时,我在日志中得到了这个

  06-09 17:09:58.240    1316-1316/com.MCHAppy.demostate.app D/MCHAppy﹕ 1 visiters  was saved
06-09 17:58:13.230    1316-1316/com.MCHAppy.demostate.app D/MCHAppy﹕ Resumed
似乎从未调用过onRestoreInstanceState。真的是这样吗

谢谢

通过

当活动从先前保存的状态重新初始化时,将在onStart()之后调用此方法,在这里的savedInstanceState中给出

这其中的关键部分是,只有当活动重新初始化时才会调用它。但是,相同的bundle总是在onCreate(bundle savedInstanceState)中传递,因此您可以将逻辑移到那里

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        visiters=savedInstanceState.getInt("visiters");
    }
}

活动
是否被杀死?如果系统未终止
活动
,则不会调用该方法。我看到了这些答案,但它们对我没有帮助:/onCreate方法仅在您第一次启动活动时调用。因此,当我点击主页图标,然后返回到我的应用程序时,onCreate将不会被调用,我看不到访问者的数量。这是不正确的。每次重新初始化活动时都会调用onCreate和onRestoreInstanceState。如果未调用onCreate,则您从未被销毁,
visiters
仍将保留其以前的值。可以肯定的是,我放了一个
Log.d(“Test”,“调用onCreate方法来恢复状态”)在onCreate方法中,但是Logcat第一次显示该消息,然后它再也没有向我显示过该消息。这意味着什么?这意味着你的活动从一开始就不会被破坏。因此,它永远不需要保存和恢复其实例。在
onDestroy(…)
中放置一个log语句,查看是否调用过它。从未调用过onDestroy。根据您提到的文章,oncreate-->onRestoreInstanceState-->onResume。不能像这样调用onPause-->onStop-->onRestart-->onStart-->onRestoreInstanceState-->onResume?