• android activity状态的保存


    今天接到一个电面,途中面试官问到一个问题,如果一个activity在后台的时候,因为内存不足可能被杀死,在这之前如果想保存其中的状态数据,比如说客户填的一些信息之类的,该在哪个方法中进行。

    onSaveInstanceState虽然不是生命周期的方法,但只要activity在非主动的情况下杀死,就肯定会被调用。

    onSaveInstanceState方法被调用的需要注意的几个地方:

    1、onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用

    2、在测试的时候发现,进行屏幕切换的时候activity被销毁了,onSaveInstanceState()方法一定被调用了

    3、在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。 

    4、我在测试的时候,使用 kill 杀死进程的方式杀死进程onSaveInstanceState() 方法没有被调用

    我们来看下面的代码

    package im.weiyuan.com.viewutils;
    
    import android.os.PersistableBundle;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
             if(savedInstanceState != null){
                 Toast.makeText(MainActivity.this,savedInstanceState.getString("data"),Toast.LENGTH_LONG).show();
             }
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.d("123456","onStop is called");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            Log.d("123456","onPause is called");
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            Log.d("123456","onSaveInstanceState is called");
            outState.putString("data","1020223");
        }
    
    
    }
  • 相关阅读:
    Codeforces Round #629 (Div. 3) (A ~ F)
    st表
    Educational Codeforces Round 81 (Rated for Div. 2)
    hihocoder#1996 : 01匹配
    P2056 [ZJOI2007]捉迷藏
    P2495 [SDOI2011]消耗战
    GUETOJ1335
    优先队列重载比较运算
    CCF认证201909-4 推荐系统
    P3178 [HAOI2015]树上操作
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7220920.html
Copyright © 2020-2023  润新知