Android Activity 之 重新创建

目的:Activity被系统销毁,重建时能恢复销毁前的状态。

原理:

Activity生命周期

实验:

说明:1、把下面代码copy到eclipse中,编译烧写到,通过横竖屏切换,可验证原理中的Activity生命周期的流程图。
2、程序通过back返回键退出程序时,不回调onSaveInstanceState。

代码:

public class MainActivity extends Activity {

    static final String EDITTEXT = "edittext";
    static final String MCOUNT = "mcount";

    private Button myButton;
    int mCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myButton = (Button) findViewById(R.id.myButton);
        myButton.setText(Integer.toString(mCount));

        myButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mCount++;
                myButton.setText(Integer.toString(mCount));
            }
        });        

        Log.d("zxs", "/------ Activity onCreate ----------/");
    }

    @Override
    protected void onStart() {
        super.onStart();

        Log.d("zxs", "/------ Activity onStart ----------/");
    }

    @Override
    protected void onRestoreInstanceState(Bundle      savedInstanceState) {   
        super.onRestoreInstanceState(savedInstanceState);

        if (savedInstanceState != null) {
            mCount = (Integer) savedInstanceState.get(MCOUNT);
            myButton.setText(Integer.toString(mCount));

            Log.d("zxs", "/------ onRestoreInstanceState savedInstanceState != null ----------/");
        } else {
            Log.d("zxs", "/------ onRestoreInstanceState savedInstanceState == null ----------/");
        }

        Log.d("zxs", "/------ Activity onRestoreInstanceState ----------/");
    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.d("zxs", "/------ Activity onResume ----------/");
    }

    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);

        savedInstanceState.putInt(MCOUNT, mCount);

        Log.d("zxs", "/------ Activity onSaveInstanceState ----------/");
    }

    @Override
    protected void onStop() {
        super.onStop();

        Log.d("zxs", "/------ Activity onStop ----------/");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        Log.d("zxs", "/------ Activity onDestroy ----------/");
    }
}

logcat:

01-22 17:00:54.393: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:00:54.403: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:00:54.403: D/zxs(28137): /—— Activity onResume ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onSaveInstanceState ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onStop ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onDestroy ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:01:06.103: D/zxs(28137): /—— onRestoreInstanceState savedInstanceState != null ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onRestoreInstanceState ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onResume ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onSaveInstanceState ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onStop ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onDestroy ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:01:15.313: D/zxs(28137): /—— onRestoreInstanceState savedInstanceState != null ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onRestoreInstanceState ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onResume ———-/

参考:
1:http://my.oschina.net/u/556624/blog/271667:
2:http://developer.android.com/

猜你喜欢

转载自blog.csdn.net/zhanxingshan007/article/details/50563795