Java 如何在android中使用savedInstanceState
我正在处理一个应用程序,但当它发生时,我无法正确理解Java 如何在android中使用savedInstanceState,java,android,Java,Android,我正在处理一个应用程序,但当它发生时,我无法正确理解savedInstanceState: package com.android.Test; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class Test extends AppCompatActivity { private TextView mT
savedInstanceState
:
package com.android.Test;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class Test extends AppCompatActivity {
private TextView mTextView = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
Toast. makeText(getApplicationContext(),"welcome",Toast. LENGTH_SHORT).show();
} else {
Toast. makeText(getApplicationContext(),"Thanks visit again",Toast. LENGTH_SHORT).show();
}
}
}
当应用程序长时间关闭和打开时,活动是如何工作的。
使用
savedInstanceState
或onRestoreInstanceState
是否还有其他方法可以实现这一点savedInstanceState是对Bundle对象的引用,它被传递到每个Android活动的onCreate方法中
onCreate()希望以Bundle作为参数调用,因此我们传递savedInstanceState
private String restored_string;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null){
restored_string = savedInstanceState.getString("key");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("key", "string value");
}
在特殊情况下,活动能够使用此捆绑包中存储的数据将自己恢复到以前的状态。如果没有可用的实例数据,则savedInstanceState将为null
例如,第一次启动活动时,savedInstanceState始终为空,但如果活动在循环期间被销毁,则可能为非空,因为每次活动启动或重新启动时都会调用onCreate。当应用程序进入后台且安卓需要系统资源(cpu时间、内存)时对于其他任务或应用程序,您的应用程序将输入savedInstance,并调用覆盖的方法onSaveInstanceState(Bundle outState)。 当用户重新输入活动时,onCreate(Bundle savedInstanceState)中的savedInstanceState将不为null,因此您可以重新创建活动所需的参数,这些参数以前已保存 在“开发人员选项”菜单下启用“不保留活动”后,您可以强制执行此行为,并且每次离开活动时,您的应用程序都会调用SaveInstanceState
private String restored_string;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null){
restored_string = savedInstanceState.getString("key");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("key", "string value");
}
旋转设备时,
savedInstanceState
将不同于null。请注意,您必须解锁设备上的方向,并且没有任何规则阻止清单上的活动。