activity的状态保存

当我们在微博中洋洋洒洒写了n多文字时,这时候电话铃声突然响起,当我们挂断电话时发现我们写的文字已经消失的无影无踪了。这时候你是不是感觉郁闷的要死啊,哈哈。。。,这就是今天我要说的activity的状态保存。

activity的状态保存有两种方式:

1.onSaveInstanceState和onRestoreInstanceState

2.onPause和onResume

下面我谈谈这两种方式的应用和区别

系统在回收当前activity之前调用onSaveInstanceState,主要表现为当前应用程序被其它程序打断,使当前应用程序由可见状态变为不可见状态。但是按Back or home键不会调用此方法。通过Bundle来保存信息,比如上面的例子


横竖屏切换的时候或者按了home or Back键之后再回来的时候调用onPause方法,通过Preferences来保存


代码如下:

import sundy.android.demo.configration.CommonConstants;
import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;

public class MainTestActivity extends Activity{

    private final String SAVE_INSTANCE_TAG = "MainTestActivity.Saveinstancetag" ;
    EditText editText = null ;
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        if(outState !=null)
        {
            outState.putString(this.SAVE_INSTANCE_TAG, "hello Sundy") ;
        }
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onSaveInstanceState")  ;
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(sundy.android.demo.R.layout.layout_activitysavestate) ;
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onCreate")  ;
        editText = (EditText)this.findViewById(sundy.android.demo.R.id.editTextState)  ;
        if(editText !=null && savedInstanceState != null)
        {
            editText.setText(savedInstanceState.getString(this.SAVE_INSTANCE_TAG))  ;
        }
        if(savedInstanceState != null)
        {
            Log.i(CommonConstants.LOGCAT_TAG_NAME,"savedInstanceState = "+savedInstanceState.getString(SAVE_INSTANCE_TAG))  ;
        }
    }


    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        this.getPreferences(MODE_PRIVATE).edit().putString(SAVE_INSTANCE_TAG, editText.getText().toString()).commit()  ;
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        editText.setText(this.getPreferences(MODE_PRIVATE).getString(SAVE_INSTANCE_TAG, ""))  ;
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onResume")  ;
    }



    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onRestoreInstanceState")  ;
    }

}

import sundy.android.demo.configration.CommonConstants;
import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;

public class MainTestActivity extends Activity{

    private final String SAVE_INSTANCE_TAG = "MainTestActivity.Saveinstancetag" ;
    EditText editText = null ;
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        if(outState !=null)
        {
            outState.putString(this.SAVE_INSTANCE_TAG, "hello Sundy") ;
        }
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onSaveInstanceState")  ;
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(sundy.android.demo.R.layout.layout_activitysavestate) ;
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onCreate")  ;
        editText = (EditText)this.findViewById(sundy.android.demo.R.id.editTextState)  ;
        if(editText !=null && savedInstanceState != null)
        {
            editText.setText(savedInstanceState.getString(this.SAVE_INSTANCE_TAG))  ;
        }
        if(savedInstanceState != null)
        {
            Log.i(CommonConstants.LOGCAT_TAG_NAME,"savedInstanceState = "+savedInstanceState.getString(SAVE_INSTANCE_TAG))  ;
        }
    }


    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        this.getPreferences(MODE_PRIVATE).edit().putString(SAVE_INSTANCE_TAG, editText.getText().toString()).commit()  ;
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        editText.setText(this.getPreferences(MODE_PRIVATE).getString(SAVE_INSTANCE_TAG, ""))  ;
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onResume")  ;
    }



    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(CommonConstants.LOGCAT_TAG_NAME,"onRestoreInstanceState")  ;
    }

}


 
 
 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值