Activity生命周期学习笔记,和横竖切屏时候activity销毁时候保存数据和调用的方法

activity生命周期图:

 下面介绍一下里面的方法:

oncreat():在activity一执行就运行的,此过程加载xml里的视图控件

onstart():是在activity视图在手机屏幕上可见时候调用执行

onResme():是获取手机屏幕空间的焦点,即可以点击控件时候执行

onpause():与onResme()是相反的,手机失去控件焦点时候执行

onStop()是activity视图在手机上不可见时候执行

ondestroy():是销毁activity,随即一个activity就会结束

在了解了activity的这些方法后,我们可以覆写这些方法来达到我们自己的目的:

1、手机横竖屏切换时候,activity会调用后3个方法,因此最后销毁了,再重新创建新的activity,因此执行的数据又会回到最初的开始地方,比如:pdf阅读器读到30页,我们转动屏幕又回到第一页这是用户不想的,下面由2种方法解决该问题:

(1)、我们在该activity清单文件里加上一个属性:android:configChanges="keyboardHidden|orientation"如下图:

<activity
            android:configChanges="keyboardHidden|orientation"  // keyboardHidden是隐藏软键盘,当横竖屏切换时候,系统会判断是否适合显示软键盘,后面一个是切屏 即这两个动作不会重启activity
                                      //也可以在代码中调用onConfigurationChanged(Configuration newConfig)来实现   
            android:name=".SecondActivity"
            android:label="secondactivity" >
             <intent-filter>
                <action android:name="com.example.multiactivity.SecondActivity" />
                <action android:name="com.example.multiactivity.SecondActivity2" />
                <action android:name="com.example.multiactivity.SecondActivity3" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

 同时也学习一下横竖屏显示的方法:

android:screenOrientation="landscape"---控制Acitvity为横屏显示。

android:screenOrientation="portrait"---控制Activity为竖屏显示

2、我们可以在覆写activity里的onSaveInstanceState(Bundle outState)方法,该方法再activity被ondestroy()时调用来保存数据,在重新创建调用oncreat()时候获取保存的值,设置page=30,注意onSaveInstanceState()方法在什么时候调用,参见http://blog.csdn.net/lccly/article/details/6089667

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(savedInstanceState!=null)
        {
        	int page=savedInstanceState.getInt("page");//取得保存的值
        	setpage(30);
        }
}


protected void onSaveInstanceState(Bundle outState) {
	// TODO Auto-generated method stub
	super.onSaveInstanceState(outState);  //将页码保存字bundle对象中
	outState.putInt("page", 30);
}

  

原文地址:https://www.cnblogs.com/bokeofzp/p/4721524.html