安卓之生命周期+onSaveInstanceState()api

生命周期架构:
在这里插入图片描述
生命周期测试用例:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("life","oncreate is use");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.i("life","onStart is use");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("life","Resume is use");
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.i("life","onSaveInstanceState is use");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("life","onPause is use");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("life","onStop is use");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("life","onDestroy is use");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("life","onRestart is use");
    }
}

在使用android写测试程序时,当运行模拟器,有可能将页面旋转后数据恢复初始化的情况,页面旋转生命周期调用情况:

在这里插入图片描述

为了解决这种情况,观察上图,我们可以在onSaveInstanceState(生命周期在stop和destory之间)对数据内容进行保存
列如,页面旋转后,保存某一个对象的内容状态:

 protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        //保存当前分数
        String now = tvScore.getText().toString();
        outState.putString("score",now);
    }

在入口进行判断和使用

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main)
        tvScore = findViewById(R.id.tvScore);
        if(savedInstanceState != null){
            tvScore.setText(savedInstanceState.getString("score"));
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值