读书人

转载:activity状态的封存和保持

发布时间: 2012-09-19 13:43:54 作者: rapoo

转载: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

读书人网 >移动开发

热点推荐