日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【Android 应用开发】Activity生命周期 与 Activity 之间的通信

發(fā)布時(shí)間:2025/6/17 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 应用开发】Activity生命周期 与 Activity 之间的通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. Activity生命周期


上圖



1. Activity狀態(tài)

激活狀態(tài) : Activity出于前臺(tái) , 棧頂位置;

暫停狀態(tài) : 失去了焦點(diǎn) , 但是用戶仍然可以看到 , 比如彈出一個(gè)對(duì)話框 , 后面的Activity出于暫停狀態(tài);

停止?fàn)顟B(tài) : 被其它的Activity覆蓋 , 用戶不可見 , 但是仍然存在;

2.Activity操作生命周期的方法

onCreate() : 初始化一些成員變量 , 如View等 , 此時(shí)進(jìn)入停止?fàn)顟B(tài);

onStart() : 被用戶可見之前調(diào)用 , 調(diào)用之后進(jìn)入暫停狀態(tài) , 如果不滿足條件我們不想讓用戶進(jìn)入應(yīng)用 , 可以在這里進(jìn)行限制 , finish掉該Activity;

onResume() : 在與用戶交互之前調(diào)用 , 調(diào)用之后進(jìn)入激活狀態(tài);

onPause() : 激活另一個(gè)Activity時(shí)調(diào)用 , 調(diào)用之后進(jìn)入暫停狀態(tài) , 界面可見 , 失去焦點(diǎn); 該操作用來(lái)保存當(dāng)前Activity數(shù)據(jù);

onStop() : Activity被覆蓋前調(diào)用 , 調(diào)用之后該Activity不可見; 該方法用來(lái)關(guān)閉舊的Activity , 注意是完全不可見的時(shí)候才會(huì)調(diào)用這個(gè)方法;

onDestroy() : Activity被銷毀前調(diào)用 ;


注意 : 在暫停狀態(tài) 和 停止?fàn)顟B(tài) , 如果內(nèi)存緊張 , 該Activity會(huì)被系統(tǒng)回收;


3.Activity運(yùn)作流程

(1)第一次啟動(dòng)Activity A ?

首先調(diào)用onCreate()方法創(chuàng)建Activity進(jìn)入停止?fàn)顟B(tài) -> 調(diào)用onStart()方法進(jìn)入暫停狀態(tài) -> 調(diào)用onResume()方法進(jìn)入激活狀態(tài);?

(2)從Activity A 跳轉(zhuǎn)到 Activity B?

A先執(zhí)行onPause()方法進(jìn)入暫停狀態(tài) -> B執(zhí)行onCreate()方法進(jìn)入停止?fàn)顟B(tài) -> B執(zhí)行onStart()方法進(jìn)入暫停狀態(tài) -> B執(zhí)行onResume()方法進(jìn)入激活狀態(tài) -> A被完全覆蓋執(zhí)行onStop()方法進(jìn)入停止?fàn)顟B(tài);

(3)從ActivityB 回到 Activity A

B執(zhí)行onPause()方法進(jìn)入暫停狀態(tài) -> A調(diào)用onRestart()方法進(jìn)入停止?fàn)顟B(tài) -> A調(diào)用onStart()方法進(jìn)入暫停狀態(tài) -> A調(diào)用onResume()方法進(jìn)入激活狀態(tài) -> B被覆蓋調(diào)用onStop()方法進(jìn)入停止?fàn)顟B(tài) -> B執(zhí)行onDestroy()方法銷毀

這里注意Activity的棧是不可逆的 , 只能后退 , 不能前進(jìn) , 回退后 , 原來(lái)的棧頂?shù)腁ctivity就馬上銷毀了.



二.?Activity之間的通信


1. Intent傳遞參數(shù)的方式

intent傳遞參數(shù)有兩種方式 :?

注意 : 在onCreate()方法中創(chuàng)建Intent的時(shí)候 , 上下文參數(shù)不能使用this , 要使用getApplicationContext();

(1)通過Bundle對(duì)象傳遞參數(shù)

Bundle對(duì)象是一個(gè)HashMap<String, Object>, 我們將數(shù)據(jù)存到這個(gè)Bundle對(duì)象中 , 然后將Bundle對(duì)象放入到Intent中去.

eg:

Intent intent = new Intent(getApplicationContext(), SecondActivity.class);Bundle bundle = new Bundle();bundle.putString("name", "MainActivity");intent.putExtra("bundle", bundle);startActivity(intent); 注意?:?

向bundle中存放數(shù)據(jù)的時(shí)候 , 對(duì)于不用的數(shù)據(jù)類型要調(diào)用不同的方法 , String類型就要調(diào)用putString()方法 ...

向Intent對(duì)象中存放bundle對(duì)象的時(shí)候 , 直接調(diào)用Intent的putExtra()方法即可;

從Intent對(duì)象取出數(shù)據(jù)?:?

取出Bundle對(duì)象 : Bundle bundle = intent.getBundleExtra("bundle")方法.

從Bundle中取出數(shù)據(jù) :?

String string = bundle.getString("string")獲取字符串?dāng)?shù)據(jù).

Boolean boolean = bundle.getBoolean("boolean")獲取布爾變量.

(2)直接將數(shù)據(jù)放入Intent對(duì)象

存放時(shí)直接調(diào)用Intent的putExtra()方法 , 無(wú)論什么類型都是這個(gè)方法 , 但是取出的時(shí)候要調(diào)用相應(yīng)類型的方法 , 如果是boolean類型就調(diào)用getBooleanExtra()方法 , 如果是字符串類型就調(diào)用getStringExtra()方法 .

Intent intent = new Intent(getApplicationContext(), MainActivity.class);intent.putExtra("name", et_second.getText().toString());startActivity(intent);

(3)在跳轉(zhuǎn)的Activity獲取數(shù)據(jù)

在Activity中想要取出跳轉(zhuǎn)之前放入的數(shù)據(jù) , 調(diào)用Activity的getIntent()方法 , 獲取Intent對(duì)象 , 在調(diào)用Intent對(duì)象的方法獲取數(shù)據(jù);

①獲取Bundle對(duì)象 , 并從Bundle對(duì)象中獲取數(shù)據(jù)?:?

Bundle bundle = this.getIntent().getBundleExtra("bundle");String name = bundle.getString("name");tv_second.setText(name);

注意 : 獲取Bundle對(duì)象的方法 : getBundleExtra("key");從Bundle中獲取數(shù)據(jù)的方法 : bundle.getString("key")調(diào)用相應(yīng)數(shù)據(jù)類型的方法;

②獲取Intent對(duì)象中的數(shù)據(jù)?:?

String name = this.getIntent().getStringExtra("name");tv_main.setText(name);

2. startActivityForResult()方法解析

在創(chuàng)建了Intent之后 , 一般情況下是使用startActivity()啟動(dòng)另一個(gè)Activity , 如果我們需要啟動(dòng)另外一個(gè)Activity , 并且需要將這個(gè)Activity中的數(shù)據(jù)返回的時(shí)候 , 就需要調(diào)用startActivityForResult()方法啟動(dòng)Activity;

在Activity A 中啟動(dòng)另外一個(gè)Activity , 需要重寫 A 中的 onActivityResult()方法?, 這個(gè)方法是用來(lái)處理返回的數(shù)據(jù)的.

在Activity B 中需要調(diào)用setResult()方法?, 設(shè)置返回的Intent , 同時(shí)注意要finish()掉這個(gè)Activity;

相關(guān)參數(shù) :?

startActivityForResult(Intent intent, int requestCode) : 第二個(gè)參數(shù)是請(qǐng)求碼 , 請(qǐng)求碼在 A 中的onActivityResult()方法中識(shí)別intent用的;

onActivityResult(int requestCode, int resultCode, Intent intent) : 第一個(gè)參數(shù)是請(qǐng)求碼 , 第二個(gè)參數(shù)是結(jié)果碼 , 這里我們只需要識(shí)別一種就可以 , 也可以兩個(gè)都進(jìn)行識(shí)別;

setResult(int resultCode, Intent intent) : 第一個(gè)參數(shù)是結(jié)果碼 , 用于 A 中的onActivityResult()中的Intent對(duì)象識(shí)別.

注意 : startActivityForResult()方法與setResult()方法的參數(shù)順義不一致;

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【Android 应用开发】Activity生命周期 与 Activity 之间的通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。