IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Activity生命周期攻略

Activity生命周期攻略 時(shí)間:2018-08-15      來源:未知

正所謂,世間萬物皆有生命,作為Android四大組件之一的Activity也具有其自己不同的生命階段,為了能夠更加深入的理解Activity,方便以后在開發(fā)項(xiàng)目中能夠如魚得水,今天有必要帶大家來一起探尋一下Activity生命周期的奧秘!

一.Activity簡介

作為Android四大組件之一,該組件為用戶提供了一個(gè)屏幕,用戶在這個(gè)屏幕上進(jìn)行操作來完成一定的功能,也可以理解為是一個(gè)界面, Android系統(tǒng)中通過活動(dòng)棧來對Activity進(jìn)行管理,而Activity自身則通過其自己的生命周期來使自己被創(chuàng)建與銷毀,既然如此,就來我們來看看Activity都有哪些生命周期?

二.Activity生命周期詳解

先來看看這張非常經(jīng)典的生命周期流程圖:



大家一定對這幅圖很熟悉吧,此前有許多關(guān)于Activity生命周期的文章,都是結(jié)合這幅圖來進(jìn)行講解,但是基本都是通過翻譯Android API,不是很好理解并且過于官方,希望大家可以通過我的總結(jié),使得自己受益匪淺。

Android系統(tǒng)中的Activity類定義了一系列的回調(diào)方法,當(dāng)Activity的狀態(tài)發(fā)生改變時(shí),相應(yīng)的回調(diào)方法將會(huì)自動(dòng)執(zhí)行,當(dāng)Activity啟動(dòng)之后,隨著應(yīng)用程序的運(yùn)行,其自身會(huì)不斷的在各種狀態(tài)之間進(jìn)行切換,相應(yīng)的回調(diào)方法也將被執(zhí)行,我們只需選擇性的重寫這些方法即可進(jìn)行相應(yīng)的業(yè)務(wù)處理,這些狀態(tài)之間的轉(zhuǎn)換就構(gòu)成了Activity的生命周期。在Activity生命周期中,主要有以下幾種方法:

onCreate():創(chuàng)建Activity時(shí)被回調(diào),用作初始化信息,例如:通過setContentView()方法呈現(xiàn)當(dāng)前UI布局、初始化該項(xiàng)目中必要的控件信息等。

onStart():啟動(dòng)Activity時(shí)被回調(diào),此時(shí)的Activity已經(jīng)顯示,但是不能和用戶進(jìn)行交互,只是可以看到。

onResume():當(dāng)此方法被回調(diào)時(shí),說明該Activity已經(jīng)可以和用戶進(jìn)行交互,獲得了焦點(diǎn)(例如:對按鈕進(jìn)行監(jiān)聽等)。

onPause():當(dāng)此方法被回調(diào)時(shí),表示Activity處于暫停狀態(tài),也可以理解為該界面被部分遮蓋。一般情況下onStop()方法會(huì)緊接著被回調(diào),但通過流程圖我們還可以看到一種情況是onPause()方法執(zhí)行后直接執(zhí)行了onResume方法,這屬于比較罕見的現(xiàn)象了,可以通過Activity跳轉(zhuǎn)時(shí)把跳轉(zhuǎn)到第二個(gè)界面主題設(shè)置為Dialog對話框模式來實(shí)現(xiàn),接下來會(huì)在代碼中為大家講解!

onStop(): 當(dāng)此方法被回調(diào)時(shí),表示Activity處于停止?fàn)顟B(tài),也可以理解為該界面被全部遮蓋。此時(shí)的Activity不可見,但是沒有被完全銷毀,仍在后臺(tái)中運(yùn)行。

onRestart():當(dāng)此方法被回調(diào)時(shí),表示Activity正在重新啟動(dòng),這種情況一般是用戶打開了一個(gè)新的Activity時(shí),當(dāng)前的Activity就會(huì)被全部遮蓋(onPause和onStop被執(zhí)行了),接著又返回到當(dāng)前Activity頁面時(shí)。也就是說從一個(gè)界面返回到之前的界面。

onDestroy():當(dāng)此方法被回調(diào)時(shí),表示該Activity正在被銷毀,生命到此結(jié)束。一般我們可以在此方法中做一些回收工作和終的資源釋放。

實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)!接下來我們通過一個(gè)Demo來驗(yàn)證上面流程中的幾種比較重要的情況,同時(shí)來觀察生命周期方法的回調(diào)時(shí)機(jī)。

三.檢驗(yàn)Activity生命周期情況

需求:實(shí)現(xiàn)兩個(gè)頁面間的跳轉(zhuǎn),并且在各自Activity中重寫以上七種生命周期回調(diào)方法,在每個(gè)方法中通過Log.i在日志中打印輸出,終來判斷生命周期方法的回調(diào)時(shí)機(jī)。

代碼如下:

第一界面的UI部分

xmlns:tools="//schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.test0104_life.MainActivity" >

<>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:text="這是第一頁面"

android:textSize="30sp" />

<>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:onClick="click"

android:text="點(diǎn)擊跳轉(zhuǎn)" />

 

跳轉(zhuǎn)到第二界面的UI部分

 

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:text="這是第二頁面"

android:textSize="30sp"

android:layout_centerHorizontal="true" />

 

第一界面的java代碼:

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Log.i("tag", "First onCreat is called!!!"); }

public void click(View v) {

Intent i = new Intent(this, SecondActivity.class);

startActivity(i); }

@Override

protected void onStart() {

// TODO Auto-generated method stub

super.onStart();

Log.i("tag", "First onStart is called!!!"); }

@Override

protected void onResume() {

// TODO Auto-generated method stub

super.onResume();

Log.i("tag", "First onResume is called!!!"); }

@Override

protected void onPause() {

// TODO Auto-generated method stub

super.onPause();

Log.i("tag", "First onPause is called!!!"); }

@Override

protected void onStop() {

// TODO Auto-generated method stub

super.onStop();

Log.i("tag", "First onStop is called!!!"); }

@Override

protected void onRestart() {

// TODO Auto-generated method stub

super.onRestart();

Log.i("tag", "First onRestart is called!!!"); }

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

Log.i("tag", "First onDestroy is called!!!"); } }

第二界面的java代碼:

public class SecondActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.second_activty);

Log.i("tag", "Second onCreate is called!!!"); }

@Override

protected void onStart() {

// TODO Auto-generated method stub

super.onStart();

Log.i("tag", "Second onStart is called!!!"); }

@Override

protected void onResume() {

// TODO Auto-generated method stub

super.onResume();

Log.i("tag", "Second onResume is called!!!"); }

@Override

protected void onPause() {

// TODO Auto-generated method stub

super.onPause();

Log.i("tag", "Second onPause is called!!!");

}

 

@Override

protected void onStop() {

// TODO Auto-generated method stub

super.onStop();

Log.i("tag", "Second onStop is called!!!"); }

@Override

protected void onRestart() {

// TODO Auto-generated method stub

super.onRestart();

Log.i("tag", "Second onRestart is called!!!"); }

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

Log.i("tag", "Second onDestroy is called!!!"); } }

下面我們通過Log打印來分析幾種生命周期方法的調(diào)用情況:

1.當(dāng)我們成功運(yùn)行Demo時(shí),第一個(gè)界面被創(chuàng)建,調(diào)用結(jié)果如下:

分析:從Log中我們可以看出Activity啟動(dòng)后,先調(diào)用了onCreate方法,然后是onStart方法,后是onResume方法,獲得焦點(diǎn),可以和用戶進(jìn)行交互。

執(zhí)行步驟: First onCreate→First onStart→First onResume

2.成功運(yùn)行后,點(diǎn)擊Home鍵,調(diào)用結(jié)果如下:

分析:點(diǎn)擊Home鍵,該程序在后臺(tái)運(yùn)行,沒有被徹底銷毀,不需調(diào)用onDestroy方法,所以,先調(diào)用onPause方法,界面被部分遮蓋,之后再調(diào)用onStop方法,界面被全部遮蓋。

執(zhí)行步驟: First onPause→First onStop

3.再次運(yùn)行該程序,調(diào)用結(jié)果如下:

分析:因?yàn)樵摮绦蛞恢痹诤笈_(tái)運(yùn)行,所以再次啟動(dòng)該程序時(shí),直接調(diào)用onRestart方法,重新啟動(dòng),之后執(zhí)行onStart方法,后是onResume方法

執(zhí)行步驟:First onRestart→First onStart→First onResume

4.點(diǎn)擊按鈕跳轉(zhuǎn)到第二個(gè)界面時(shí),調(diào)用結(jié)果如下:

分析:當(dāng)進(jìn)行第二界面跳轉(zhuǎn)時(shí),第一界面先被部分遮蓋,調(diào)用onPause,之后創(chuàng)建第二界面的流程和創(chuàng)建第一界面相同,先調(diào)用了onCreate方法,然后是onStart方法,后是onResume方法,成功創(chuàng)建之后第一界面被全部遮蓋,執(zhí)行onStop方法。(也可以理解為第二界面緩緩的把第一界面進(jìn)行遮蓋) 執(zhí)行步驟:First onPause→Second onCreate→Second onStart→Second onResume→First onStop

5.點(diǎn)擊Back鍵,返回到第一界面,調(diào)用結(jié)果如下:

分析:返回到第一界面時(shí),第二界面先被部分遮蓋,之前沒有被銷毀的第一界面重新啟動(dòng),調(diào)用onRestart方法,然后是onStart方法,后是onResume方法,獲得焦點(diǎn),再次的可以和用戶進(jìn)行交互。之后第二界面才被全部遮蓋,并且終被徹底銷毀,執(zhí)行onDestroy方法。

執(zhí)行步驟:Second onPause→First onRestart→First onStart→First onResume→Second onStop→Second OnDestroy

6.此前我們提到過,流程圖還可以看到一種情況是onPause方法執(zhí)行后直接執(zhí)行了onResume方法。我們將其第二個(gè)界面主題設(shè)置為Dialog對話框模式。

修改代碼如下:

android:label="@string/app_name"

android:theme="@style/MyTheme" >

點(diǎn)擊按鈕跳轉(zhuǎn)第二界面,調(diào)用結(jié)果如下:

分析:跳轉(zhuǎn)到第二界面時(shí),第一界面被部分遮蓋,調(diào)用onPause,第二界面被創(chuàng)建,和之前的流程相同,先調(diào)用了onCreate方法,然后是onStart方法,后是onResume方法,但是!當(dāng)?shù)诙缑姹粍?chuàng)建完成時(shí),第一界面也不會(huì)被全部遮蓋,不會(huì)調(diào)用onStop方法,因?yàn)橹黝}為Dialog對話框,界面較小,遮蓋不住之前的第一界面。

執(zhí)行步驟:First onPause→Second onCreate→Second onStart→Second onResume

接下來點(diǎn)擊Back鍵,返回到第一界面:

分析:由于此前的第一界面沒有被全部遮蓋,所以直接調(diào)用onResume方法,再次獲得焦點(diǎn),并且與用戶進(jìn)行交互。

執(zhí)行步驟:Second onPause→Firat onResume→Second onStop→Second onDestroy

上一篇:數(shù)模轉(zhuǎn)換(芯片PCF8591)

下一篇:帶你了解make menuconfig

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 塑木地板-木塑地板厂家「云南昆明楚雄曲靖玉溪塑木地板」云南云冶中信塑木新型材料有限公司 | 尼日利亚SONCAP认证_沙特SABER认证_摩洛哥COC认证-诺帝检测技术(上海)有限公司 | 橡皮艇_冲锋舟_充气钓鱼船_橡皮艇价格_海威龙橡皮艇生产厂家-首页 | 首页-西安汉沣精密机械有限公司 首页-上海钢之杰智能建筑集团股份有限公司 | 汇讯WiseUC--连接人与业务,以即时通讯为基础的应用集成平台 | 游离二氧化硅处理仪-恒温恒湿称重系统-智能蒸馏仪-硫化物酸化吹气仪-萃取仪-COD消解仪 | 威海实木家具-威海定制家具-威海家具-威海至佳百隆家具有限公司 威海木箱,威海木托盘,威海免熏蒸包装箱-威海耀晟木制品有限公司 | 科衣洛定制衣柜,书柜,厨柜,衣帽间,电视柜,酒柜,餐厅柜,门厅柜,鞋柜——科衣洛全屋定制官网 | 微孔板恒温振荡器-超声波探伤试块-微孔板迷你离心机-南京互川电子有限公司 | 宁波刑事辩护律师-建设工程律师-工程款合同律师-喻明辉律师 | 行星式球磨机-实验室球磨仪[东方天净]小型高能研磨筛分仪直销厂家 | 叛逆孩子改造,青少年行为矫正,戒网瘾学校,特训学校,全封闭军事化管理学校 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 吸音板_隔音板多少钱_降噪声学材料_环保阻燃防火_吸声装饰工程定制_厂家价格直供 - 佛山天阶声学材料厂 | 苏州妙凯电子有限公司-供应军工电源芯片|线性恒流IC|开关电源IC|LED驱动芯片|MOS管|IPM|IGBT|MCU开发|电源模块 | 欧路哲门窗|佛山欧路哲门窗有限公司|专业门窗定制品牌 | 浙江云野科技有限公司_智慧旅游规划_智慧景区管理系统_全域旅游解决方案-云野科技旅游大数据管理平台 | 上海鳞片胶泥-环氧胶泥价格-鳞片涂料批发-乙烯基树脂-环氧结构胶-上海富晨 | 企业资质代办-代理全国工商注册公司_公司转让_增值电信业务许可证新办续期-大通天成科技[gw] | 苏州宣传片制作_企业展厅设计_博物馆设计_展馆设计_方行舟设计公司 | 洗地机_扫地机_扫地车品牌_尘推车_工业吸尘器_山东鼎洁盛世 | 浏阳企业网站建设|设计|制作,专业做网站,建站公司-冠讯网络公司 领先的一站式_专利申请代理知识产权服务平台_乐知网 | 油漆颜料砂磨机,油墨水砂磨机,水性涂料砂磨机-常州市奥能达机械设备有限公司 | 江苏美鑫食品科技有限公司 | 玉米脱皮制糁机-玉米深加工机械价格-玉米糁加工机器设备-玉米渣加工成套设备-河南粮院 | 深圳喜运达物流官网_东南亚物流|海运|专线|海外仓_泰国菲律宾马来西亚海运|物流专线|海外仓 | 全球石油化工网 - 石油化工资讯,石油化工机械,石油化工设备,石油化工贸易,石油化工技术,尽在石油化工网 | 山东腾达源金属材料官网-耐磨板nm400,nm400耐磨钢板,nm500耐磨钢板切割,耐候板批发,高强板现货【价格】 | 涂塑复合钢管,大口径涂塑钢管,内外涂塑钢管厂家-沧州友诚管业有限公司 | 双相钢,双相不锈钢,2507双相不锈钢-海新双相钢| 徐州恒铭机械设备有限公司_装载机配件_压路机配件_起重机配件_挖掘机配件_配件_徐州恒铭机械设备有限公司 | 天津鸿宸机械设备有限公司-提取浓缩设备和生物制药设备以及制剂设备、粉碎设备、烘干等设备供应商 | 上饶环亚电脑会计培训学校--电脑学校|上饶电脑学校|上饶电脑培训|会计培训|上饶会计培训|上饶县会计培训|广丰会计培训|玉山会计培训|横峰会计培训|上饶网店培训 上进电缆(嘉兴)股份有限公司官网 - 光伏电缆|防火电缆|电力电缆|铝合金电缆专业生产厂家 | 河卵石制砂机|鹅卵石制砂机-移动制砂机-制砂设备-郑州秦星机械设备有限公司 | 上海礼品公司_定制商务礼品_促销礼品_福利礼品_创意礼品_上海普田商贸有限公司 | 苏州注塑|无锡注塑|上海注塑|苏州汉科精密注塑有限公司 | 上海况胜_玻璃反应釜厂家_双层玻璃反应釜_实验室玻璃反应釜 | 天津印刷_天津印刷厂_天津印刷公司_天津包装盒厂家_天津包装盒印刷厂_七层共挤膜厂家_彩色印刷_画册印刷_礼品盒定做 _七层共挤膜_食品真空袋-欢迎访问嘉联包装官网! | 酒类灌装机厂家_贴标机_灌装生产线-青州市锦德包装机械有限公司 酒店设计_建筑设计_室内装修装饰-北极点酒店设计公司 | 首页--南京俊全科技有限公司,环保监测无人机,大疆无人机,农用无人机,植保无人机,巡检无人机,无人机环境监测仪,消防,无人机,航拍测绘,固定翼无人机,无人机电力巡检,四旋翼无人机 | 射频微波_微波元器件_芯片_电源模块_Raychem_立维创展 |