• Android基础(七) Activity的生命周期


    1.Activity的三种状态

        运行状态:Activity在最前端运行

        停止状态:Activity不可见,完全被覆盖

        暂停状态:Activity可见,但前端还有其他Activity

    2.Activity生命周期的相关方法

        onCreate():在Activity创建时调用,或者程序在暂停、停止状态下被杀死之后,重新打开时也会调用。

        onStart():onCreate()方法被调用以后,或者Activity从停止状态恢复到运行状态时调用。

        onResume():onStart()方法被调用以后,或者Activity从暂停状态恢复到运行状态时会调用。

        onPause():Activity进入暂停、停止状态,或者Activity销毁时都会调用。

        onStop():Activity进入停止状态,或者Activity销毁时会调用。

        onDestroy():Activity销毁时调用。

        onRestart():Activity从停止状态恢复到运行状态时会调用,并且会依次调用onStart()、onResume()方法。

    clip_image002

    3.横竖屏切换时Activity的行为

        默认情况下,Activity会随着传感器方向的改变而改变,而可见的Activity在横竖屏切换的时候会被销毁重绘。

        onSaveInstanceState(Bundle outState):在Activity被动的摧毁或者停止的时候调用,用于保存程序运行时的数据,可以将数据保存在Bundle中。

        onRestoreInstanceState(Bundle savedInstanceState):该方法在Activity被重绘时调用,savedInstanceState就是onSaveInstanceState(Bundle outState)方法保存下来的数据。

        如果不希望Activity被摧毁重绘,可以在对应的<activity>标签中设置如下属性:

            android:configChanges="orientation"

        这样在改变方向时就会执行onConfigurationChanged()方法,而不会摧毁重绘。

        如果需要指定Activity的方向,可以在<activity>标签中设置如下属性:

            android:screenOrientation=””

    public class MainActivity extends Activity {
    	
    	@Override
    	public void onConfigurationChanged(Configuration newConfig) {
    		super.onConfigurationChanged(newConfig);
    		System.out.println("横竖屏切换: " + newConfig.orientation);
    	}
    	
    	@Override
    	protected void onSaveInstanceState(Bundle outState) {
    		super.onSaveInstanceState(outState);
    		System.out.println("onSaveInstanceState");
    		outState.putString("data", "销毁前存储的数据!!!");
    	}
    	
    	@Override
    	protected void onRestoreInstanceState(Bundle savedInstanceState) {
    		super.onRestoreInstanceState(savedInstanceState);
    		System.out.println("onRestoreInstanceState");
    		System.out.println(savedInstanceState.getString("data"));
    	}
    	
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            System.out.println("onCreate");
            System.out.println(savedInstanceState == null ? "null" : savedInstanceState.getString("data"));
        }
        
    	protected void onStart() {
    		super.onStart();
    		System.out.println("onStart");
    	}
    
    	protected void onRestart() {
    		super.onRestart();
    		System.out.println("onRestart");
    	}
    
    	protected void onResume() {
    		super.onResume();
    		System.out.println("onResume");
    	}
    	
    	protected void onPause() {
    		super.onPause();
    		System.out.println("onPause");
    	}
    
    	protected void onStop() {
    		super.onStop();
    		System.out.println("onStop");
    	}
    
    	protected void onDestroy() {
    		super.onDestroy();
    		System.out.println("onDestroy");
    	}
    
    	public void full(View view) {
        	startActivity(new Intent(this, FullScreenActivity.class));
        }
        
        public void dialog(View view) {
        	startActivity(new Intent(this, DialogActivity.class));
        }
    }
    public class FullScreenActivity extends Activity {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.full);
        }
    }

    清单文件:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.xxx.life"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="10" />
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            
            <activity
                android:screenOrientation="fullSensor"
                android:configChanges="orientation"
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            
            <activity  android:name=".FullScreenActivity" />
            <activity  android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog" />
        </application>
    
    </manifest>
  • 相关阅读:
    2017.9.15 HTML学习总结---表格table
    2017.9.14 HTML学习总结---超链接标签图片标签
    2017.9.13 微机原理学习总结(一)
    2017.9.12 初入HTML -----学习总结(二)
    2017.9.11 初入HTML学习
    【死磕Java并发】-----Java内存模型之happens-before
    Java并发编程:volatile关键字解析[volatile最好的文章]
    【框架】[MyBatis]DAO层只写接口,不用写实现类
    MyBatis结果集处理,中resultType和resultMap的区别
    浅谈 Mybatis中的 ${ } 和 #{ }的区别
  • 原文地址:https://www.cnblogs.com/chenchong/p/3034336.html
Copyright © 2020-2023  润新知