Activity生命周期——Mars Android开发视频之第二季第一集(重)

1· Activity的生命周期(一)

1.1 如何定义多个Activity

1 - 新建一个类,继承Activity前端

package com.example.activiylife;

import android.app.Activity;

public class SecondActivity extends Activity{

}

2- 重写Activity中的onCreate方法android

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

3- 建立布局文件:数据结构

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
	<TextView 
	    android:id="@+id/textView"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="textView"/>
    
</LinearLayout>

4- 在onCreate方法中调用布局文件app

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second);
	}

5- 在主配置文件(AndroidManifest.xml)中注册该Activity函数

在<application>中添加一对<activity>子标签;布局

android:name后面写新增的activit的完整类名this

<activity
            android:name="com.example.activiylife.SecondActivity"
            android:label="@string/app_name" >
        </activity>

至此,就完成、增长了一个全新的activity。code

若是想要看见它的话,咱们还须要改一个地方:xml

在主配置文件中,为这个新activity增长这段内容:对象

<intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

有这段内容,这个activity就会被做为默认activity,另外,咱们还应该在前一个使用它的地方,把它删除了:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.activiylife.MainActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.example.activiylife.SecondActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

这时,启动程序就会默认启动新增的activity:

输入图片说明

1.2 启动另外一个Activity的方法

1- 生成一个意图对象(Intent)

Intent intent = new Intent();

2- 调用setClass方法设置要启动的Activity

//参数为Context类型对象,它是Activity的父类,全部Activity对象能够向上转型为Context对象
//第一个参数是当前activity对象,第二个参数为要启动的activity.class
intent.setClass(Context packageContext, Class<?> cls)

3- 调用startActivity方法启动Activity

startActivity(intent);

这样就能实现启动另外一个activity;

下面用一个例子来讲明: 在第一个activity点击按钮启动第二个activity。

第一个activity的按钮监听:

class ButtonListener implements OnClickListener {
		public void onClick(View v) {
			Intent intent = new Intent();
			intent.setClass(MainActivity.this, SecondActivity.class);
			startActivity(intent);
		}
	}

同时将默认activity设置为第一个activity:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.activiylife.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="com.example.activiylife.SecondActivity"
            android:label="SecondActivity" >
        </activity>
    </application>

启动程序:

输入图片说明

点击按钮来到secondeactivity:

输入图片说明

1.3 Android当中的back stack(后退栈)

栈:一种先进后出的数据结构

输入图片说明

用在activity上面的意思就是:

第一个activity在栈的最底层; 第二个activity在栈的倒数第二层; ... 最新的activity在栈的最上面,显示在手机屏幕上;

点击返回的时候,是返回到前一个activity,五、四、三、二、1这样一直返回到栈最底层的activity。

2· Activity的生命周期(二)

2.1 什么是生命周期

Activity从建立到销毁这就是一个生命周期,在这个过程当中的不一样阶段要作不一样的事。 具体处于什么阶段,这个由系统来控制,但具体阶段所作的事,能够根据需求来实现。

2.2 Activity的生命周期函数

这些函数由系统自动调用; 何时调用是由系统决定的,但函数内容是咱们能够根据需求来定制。

输入图片说明

2.3 生命周期函数的调用时机

为了初步了解这些函数的调用时机,咱们经过一个例子来讲明。

在这个例子中,咱们一共须要两个activity,实现从界面1点击按钮能进入界面2。

同时在两个activity中,都重写这个7个函数,打印输出语句。

第一个activity的按钮监听器:

class ButtonOnClickListener implements OnClickListener {
		public void onClick(View arg0) {
			Intent intent = new Intent();
			intent.setClass(MainActivity.this, SecondActivity.class);
			startActivity(intent);
		}
	}

除onCreate外,另外的6个方法,两边activity都要重写: (记得在onCreate方法中 写一行打印语句)

protected void onDestroy() {
		super.onDestroy();
		System.out.println("----onDestroy----");
	}

	protected void onPause() {
		super.onPause();
		System.out.println("----onPause----");
	}

	protected void onRestart() {
		super.onRestart();
		System.out.println("----onRestart----");
	}

	protected void onResume() {
		super.onResume();
		System.out.println("----onResume----");
	}

	protected void onStart() {
		super.onStart();
		System.out.println("----onStart----");
	}

	protected void onStop() {
		super.onStop();
		System.out.println("----onStop----");
	}

启动APP,进入第一个activity:

执行的函数依次为:

1- onCreate-- Activity对象第一次建立时执行(第一个activity第一次建立)

2- onStart-- 能够看见Activity的时候执行(第一个activity可见)

3- onResume-- 当Activity能够与用户交互时调用(第一个activity可交互)

输入图片说明

接着咱们打开第二个activity:

函数执行顺序:

1- onPause-- 即将启动另一个activity时执行。(这里要启动第二个activity了,因此第一个activity执行了onPause方法)

2- onCreate-- activity对象第一次被建立时执行(第二个activity是第一次启动,因此要执行onCreate)

3- onStart-- 当actvitiy可见时被执行 (第二个activity可见)

4- onResume-- 当activity能够进行交互时执行 (第二个activity可交互)

5- onStop-- 当activity不可见时执行 (第一个activity不可见)

输入图片说明

接着咱们点击返回:

执行顺序:

1- onPause-- 即将启动另一个activity时执行(要启动第一个activity,因此第二个activity执行onPause)

2- onRestart-- 当一个Activity再次启动以前执行(第一个activity在以前已经被启动过了,因此这里执行onRestart)

3- onStart-- activity可见时执行(第一个activity可见)

4- onResume-- activity可交互时执行(第一个activity可交互)

5- onStop-- activity不可见时执行(第二个activity不可见)

6- onDestroy-- 当前activity被销毁以前执行(第二个activity被销毁)

输入图片说明

以上,咱们就能够了解到一个activity的生命周期是什么样的。

  • Activity-A第一次启动时执行:onCreate\onStart\onResume

  • 启动其余Activity前,Activity-A会执行onPause

  • 在其余Activity启动好,同时看不见Activity-A的时候,Activity-A会执行onStop

  • 从新回到Activity-A的时候,Activity-A会执行:onRestart\onStart\onResume

  • 当关闭Activity-A的时候,Activity-A会执行:onStop/onDestroy.

3· Activity的生命周期(三)

3.1 Activity对象的状态

状态

  • Resumed : Activity对象处于运行状态

  • Paused : 另外一个Activity位于前端,但本Activity还可见

  • Stopped : 另外一个Activity位于前端,彻底遮蔽本Activity

注意:

  • Activiy不会自动释放占用资源
  • 须要在onStop、onPause、onDestroy中写代码来释放资源

3.2 成对的生命周期函数

Activity生命周期图

输入图片说明

onCreate和onDestroy一对

onPause和onResume一对

onStop和onStart一对

onRestart暂时一我的。

3.3 一个无厘头的比喻

onCreate-买车 onDestroy-报废

onStart-点火启动 onStop-熄火

onResume-踩油门前进 onPause-松开油门(刹车)

相关文章
相关标签/搜索