转载:activity状态的保存和保持
比较onSaveInstanceState() 与 onRetainNonConfigurationInstance()在不同需求中的用法
很多网友可能知道Android横竖屏切换时会触发onSaveInstanceState,而还原时会产生onRestoreInstanceState,但是Android的Activity类还有一个方法名为onRetainNonConfigurationInstance和getLastNonConfigurationInstance这两个方法。
?? 我们可以通过? onRetainNonConfigurationInstance 代替 onSaveInstanceState,比如距离2
? @Override
? public Object onRetainNonConfigurationInstance()
?{???
?????? //这里需要保存的内容,在切换时不是bundle了,我们可以直接通过Object来代替
????? return obj;
?}
?在恢复窗口时,我们可以不使用 onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。我们可以直接在onCreate中使用,比如
? Object obj = getLastNonConfigurationInstance();???? 最终obj的内容就是上次切换时的内容。
针对package com.androidres.karka;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.util.Log;import android.provider.Contacts.People;public class KarKa extends Activity {static final int PICK_REQUEST = 1337;Button viewButton = null;Uri contact = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btn = (Button) findViewById(R.id.pick);btn.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {Intent i = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);startActivityForResult(i, PICK_REQUEST);}});viewButton = (Button) findViewById(R.id.view);viewButton.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {startActivity(new Intent(Intent.ACTION_VIEW, contact));}});restoreMe();viewButton.setEnabled(contact != null);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == PICK_REQUEST) {if (resultCode == RESULT_OK) {contact = data.getData();viewButton.setEnabled(true);}}}@Overridepublic Object onRetainNonConfigurationInstance() {return (contact);}private void restoreMe() {contact = null;if (getLastNonConfigurationInstance() != null) {contact = (Uri) getLastNonConfigurationInstance();}}}
?
查看来源
来自Androidres.com