如何使用saveInstanceState保存活动状态?

内容来自 DOC https://q.houxu6.top/?s=如何使用saveInstanceState保存活动状态?

我已经在Android SDK平台上工作了一段时间,但是不太清楚如何保存应用程序的状态。因此,针对这个“Hello, Android”示例进行了一些微小的调整:

package com.android.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {

  private TextView mTextView = null;

  /\*\* Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mTextView = new TextView(this);

    if (savedInstanceState == null) {
       mTextView.setText("Welcome to HelloAndroid!");
    } else {
       mTextView.setText("Welcome back.");
    }

    setContentView(mTextView);
  }
}

我认为对于最简单的情况来说,这已经足够了,但是它总是响应第一条消息,无论我如何离开应用程序。

我确信解决方案非常简单,就像覆盖onPause方法或者类似的东西,但是我在文档中查找了大约30分钟,并没有发现任何明显的东西。


你需要重写onSaveInstanceState(Bundle savedInstanceState)方法,并将你想要更改的应用程序状态值写入Bundle参数,像这样:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // 将UI状态更改保存到savedInstanceState中。
  // 如果进程被杀死并重新启动,此bundle将被传递给onCreate。
  savedInstanceState.putBoolean("MyBoolean", true);
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "Welcome back to Android");
  // 等等。
}

Bundle本质上是一种存储NVP(“名称-值对”)映射的方式,它将传递到onCreate()onRestoreInstanceState(),然后你可以从活动中像这样提取值:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // 从savedInstanceState中恢复UI状态。
  // 此bundle也已传递给onCreate。
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

或者从片段中。

@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);
    // 从savedInstanceState中恢复UI状态。
    // 此bundle也已传递给onCreate。
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
    double myDouble = savedInstanceState.getDouble("myDouble");
    int myInt = savedInstanceState.getInt("MyInt");
    String myString = savedInstanceState.getString("MyString");
}

你通常会使用这种技术来存储应用程序的实例值(选择、未保存的文本等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值