Activity的描述:
Activity運(yùn)行在任務(wù)棧中,可見(jiàn)可交互,繼承自context,并實(shí)現(xiàn)了Windows.callback和keyEvent.callback用來(lái)處理用戶和界面的交互;
Activity的生命周期
首先先看一張圖片來(lái)先大概了解一下Activity的生命周期;
Activity的生命周期
Activity的生命周期中有這么7個(gè)方法,下來(lái)將會(huì)逐一的介紹著7個(gè)方法(應(yīng)用):
1.啟動(dòng)Activity: 系統(tǒng)會(huì)先調(diào)用onCreate()方法,此時(shí),一個(gè)Activity被系統(tǒng)創(chuàng)建出來(lái);然后調(diào)用onStrat(),大哥(系統(tǒng))創(chuàng)建的這個(gè)Activity開(kāi)始啟動(dòng)但是還沒(méi)有運(yùn)行起來(lái),只是啟動(dòng)了;就在這個(gè)時(shí)候onResume()方法來(lái)了,這個(gè)時(shí)候程序就 運(yùn)行起來(lái).
2.當(dāng)前Activity被其他Activity進(jìn)行覆蓋或者鎖屏:系統(tǒng)會(huì)調(diào)用onPause()方法,暫停當(dāng)前Activity的運(yùn)行;
3.當(dāng)前Activity由被覆蓋狀態(tài)到回到前臺(tái)或者被鎖屏:系統(tǒng)會(huì)調(diào)用onResume()方法,在此進(jìn)入運(yùn)行狀態(tài);
4.當(dāng)前Activity轉(zhuǎn)到新的Activity界面或者按Home鍵回到鎖屏自身退到后臺(tái):系統(tǒng)先調(diào)用了onPause()方法,然后調(diào)用了onStop()方法,進(jìn)入停滯狀態(tài);
5.用戶退回到此Activity:此時(shí)系統(tǒng)會(huì)先調(diào)用onRestart()方法,再調(diào)用onStart()方法,然后調(diào)用onResume()方法,此時(shí)程序運(yùn)行起來(lái)了;
6.當(dāng)前Activity被其他Activity進(jìn)行覆蓋或者進(jìn)入后臺(tái)不可見(jiàn)狀態(tài),即第2步和第4步,系統(tǒng)內(nèi)存不足,殺死Activity,而后用戶在此進(jìn)入這個(gè)Activity將會(huì)在此調(diào)用onCreate()方法,onStart(),和onResume()方法,進(jìn)入運(yùn)行裝太,相當(dāng)于重新創(chuàng)建了一個(gè)新的Activity;
7.7.用戶退出當(dāng)前Activity:系統(tǒng)先調(diào)用onPause方法,然后調(diào)用onStop方法,最后調(diào)用onDestory方法产舞,結(jié)束當(dāng)前Activity大咱。
以上7個(gè)的應(yīng)用讓你體會(huì)到了一個(gè)Activity在系統(tǒng)中的存的一生了吧,從生下來(lái)(onCreate),青年(onStart),成年(onResume),中年(onPasue),老年(onStop),死亡(onDestroy),不過(guò)在當(dāng)他在進(jìn)入老年裝太時(shí)還有機(jī)會(huì)重回青年,那就是所謂的回光返照(onRestart);
如果你的體會(huì)還是不夠深的話,那我就擼一段代碼讓你深刻體會(huì)一個(gè)Activity的一聲是有多么的精彩;
Activity的生命周期中有這么7個(gè)方法,下來(lái)將會(huì)逐一的介紹著7個(gè)方法(應(yīng)用):
1.啟動(dòng)Activity: 系統(tǒng)會(huì)先調(diào)用onCreate()方法,此時(shí),一個(gè)Activity被系統(tǒng)創(chuàng)建出來(lái);然后調(diào)用onStrat(),大哥(系統(tǒng))創(chuàng)建的這個(gè)Activity開(kāi)始啟動(dòng)但是還沒(méi)有運(yùn)行起來(lái),只是啟動(dòng)了;就在這個(gè)時(shí)候onResume()方法來(lái)了,這個(gè)時(shí)候程序就 運(yùn)行起來(lái).
2.當(dāng)前Activity被其他Activity進(jìn)行覆蓋或者鎖屏:系統(tǒng)會(huì)調(diào)用onPause()方法,暫停當(dāng)前Activity的運(yùn)行;
3.當(dāng)前Activity由被覆蓋狀態(tài)到回到前臺(tái)或者被鎖屏:系統(tǒng)會(huì)調(diào)用onResume()方法,在此進(jìn)入運(yùn)行狀態(tài);
4.當(dāng)前Activity轉(zhuǎn)到新的Activity界面或者按Home鍵回到鎖屏自身退到后臺(tái):系統(tǒng)先調(diào)用了onPause()方法,然后調(diào)用了onStop()方法,進(jìn)入停滯狀態(tài);
5.用戶退回到此Activity:此時(shí)系統(tǒng)會(huì)先調(diào)用onRestart()方法,再調(diào)用onStart()方法,然后調(diào)用onResume()方法,此時(shí)程序運(yùn)行起來(lái)了;
6.當(dāng)前Activity被其他Activity進(jìn)行覆蓋或者進(jìn)入后臺(tái)不可見(jiàn)狀態(tài),即第2步和第4步,系統(tǒng)內(nèi)存不足,殺死Activity,而后用戶在此進(jìn)入這個(gè)Activity將會(huì)在此調(diào)用onCreate()方法,onStart(),和onResume()方法,進(jìn)入運(yùn)行裝太,相當(dāng)于重新創(chuàng)建了一個(gè)新的Activity;
7.7.用戶退出當(dāng)前Activity:系統(tǒng)先調(diào)用onPause方法松申,然后調(diào)用onStop方法娃闲,最后調(diào)用onDestory方法瓶颠,結(jié)束當(dāng)前Activity骑晶。
以上7個(gè)的應(yīng)用讓你體會(huì)到了一個(gè)Activity在系統(tǒng)中的存的一生了吧,從生下來(lái)(onCreate),青年(onStart),成年(onResume),中年(onPasue),老年(onStop),死亡(onDestroy),不過(guò)在當(dāng)他在進(jìn)入老年裝太時(shí)還有機(jī)會(huì)重回青年,那就是所謂的回光返照(onRestart);
如果你的體會(huì)還是不夠深的話,那我就擼一段代碼讓你深刻體會(huì)一個(gè)Activity的一聲是有多么的精彩;
package com.heima.myapplication;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity" ;
private int param = 1;
//一個(gè)Activity被創(chuàng)建出來(lái)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),TargetActivity.class);
startActivity(intent);
}
});
}
//Activity創(chuàng)建或者從后臺(tái)回到前臺(tái)時(shí)被調(diào)用
@Override
protected void onStart() {
super.onStart();
Log.i(TAG,"onStart called");
}
//Activity 重新回到前臺(tái)時(shí)被調(diào)用
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart called.");
}
//Activity創(chuàng)建或者從被覆蓋痛垛、后臺(tái)重新回到前臺(tái)時(shí)被調(diào)用
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume called.");
}
//Activity窗口獲得或失去焦點(diǎn)時(shí)被調(diào)用,在onResume之后或onPause之后
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.i(TAG, "onWindowFocusChanged called.") ;
}
//Activity被覆蓋到下面或者鎖屏?xí)r被調(diào)用
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause called.");
//有可能在執(zhí)行完onPause或onStop后,系統(tǒng)資源緊張將Activity殺死,所以有必要在此保存持久數(shù)據(jù)
}
//退出當(dāng)前Activity或者跳轉(zhuǎn)到新Activity時(shí)被調(diào)用
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop called.");
}
//退出當(dāng)前Activity時(shí)被調(diào)用,調(diào)用之后Activity就結(jié)束了
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestory called.");
}
/**
* Activity被系統(tǒng)殺死時(shí)被調(diào)用.
* 例如:屏幕方向改變時(shí),Activity被銷毀再重建;當(dāng)前Activity處于后臺(tái),系統(tǒng)資源緊張將其殺死.
* 另外,當(dāng)跳轉(zhuǎn)到其他Activity或者按Home鍵回到主屏?xí)r該方法也會(huì)被調(diào)用,系統(tǒng)是為了保存當(dāng)前View組件的狀態(tài).
* 在onPause之前被調(diào)用.
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("param", param);
Log.i(TAG, "onSaveInstanceState called. put param: " + param);
super.onSaveInstanceState(outState);
}
/**
* Activity被系統(tǒng)殺死后再重建時(shí)被調(diào)用.
* 例如:屏幕方向改變時(shí),Activity被銷毀再重建;當(dāng)前Activity處于后臺(tái),系統(tǒng)資源緊張將其殺死,用戶又啟動(dòng)該Activity.
* 這兩種情況下onRestoreInstanceState都會(huì)被調(diào)用,在onStart之后.
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
param = savedInstanceState.getInt("param");
Log.i(TAG, "onRestoreInstanceState called. get param: " + param);
super.onRestoreInstanceState(savedInstanceState);
}
}