首页 > 解决方案 > Activity 生命周期存储和恢复

问题描述

“使用 onSavedInstanceState(Bundle) 保存所有数据,但如果我的应用程序已关闭,则重新打开我的应用程序以及如何恢复保存的实例”

package com.example.savedandrestored;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText first,last;
Button submit;
@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    first=findViewById(R.id.firstname);
    last=findViewById(R.id.lastname);
    submit=findViewById(R.id.submit);
    if(savedInstanceState!=null && savedInstanceState.containsKey("firstName") && savedInstanceState.containsKey("lastName")) {
        first.setText(savedInstanceState.get("firstName").toString());
        last.setText(savedInstanceState.get("lastName").toString());
    }
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
 savedInstanceState.putString("firstName",first.getText().toString());
   savedInstanceState.putString("lastName",last.getText().toString());
            onSaveInstanceState(savedInstanceState);
        }
    });
    }
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState){
        super.onSaveInstanceState(savedInstanceState);
     }
}

“当我打开应用程序并且没有执行新数据时它不会恢复数据”

标签: android

解决方案


onSaveInstanceState用于其他目的,例如在轮换中重新创建活动等。

使用 onSavedInstanceState(Bundle) 保存所有数据,但如果我的应用程序已关闭,则重新打开我的应用程序

然后你应该阅读一个活动的生命周期

但你的问题的简短答案是

  1. 将您的数据保存在里面onPause
  2. 取回它onResume

像一个例子

import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //retrieve your data here and update UI here not onCreate 

    }

    @Override
    protected void onPause() {
        super.onPause();

        //Save your data here into shared prefs, or file, or DB (*last not recommended)
    }
}

推荐阅读