Activity的知识
??? 什么是 Activity?
通俗一點(diǎn)說 Activity 就是一個(gè)界面,這個(gè)界面里面可以放置各種控件。Activity 的界面也是 用 xml 文件表示的,放置在 res->layout 下面。每生成一個(gè)新的 Activity 后,我們需要在 AndroidManifest.xml 中注冊(cè)一下這個(gè) activity?
??? 請(qǐng)描述一下 Activity 生命周期。
onCreate(Bundle savedInstanceState):創(chuàng)建 activity 時(shí)調(diào)用。設(shè)置在該方法中,還以 Bundle 的形式提供對(duì)以前儲(chǔ)存的任何狀態(tài)的訪問!? onStart():activity 變?yōu)樵谄聊簧蠈?duì)用戶可見時(shí)調(diào)用。? onResume():activity 開始與用戶交互時(shí)調(diào)用(無論是啟動(dòng)還是重新啟動(dòng)一個(gè)活動(dòng),該方法 總是被調(diào)用的)。? onPause():activity 被暫停或收回 cpu 和其他資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)的,也 是保護(hù)現(xiàn)場(chǎng),壓棧吧!? onStop():activity 被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時(shí)調(diào)用。? onRestart():重新啟動(dòng) activity 時(shí)調(diào)用。該活動(dòng)仍在棧中,而不是啟動(dòng)新的活動(dòng)。? onDestroy():activity 被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用,該方法被調(diào)用?
??? 兩個(gè) Activity 之間跳轉(zhuǎn)時(shí)必然會(huì)執(zhí)行的是哪幾個(gè)方法。
onCrante() //在 Activity 生命周期開始時(shí)調(diào)用 onRestoreInstanceState()//用來恢復(fù) UI 狀態(tài) onReStart()//當(dāng) Activity 重新啟動(dòng)時(shí)調(diào)用 onStart()//Activity 對(duì)用戶即將可見時(shí)調(diào)用 onResume()//當(dāng) Activity 與用戶交互時(shí),繪制界面 onSaveInstanceState()//activity 即將移出棧頂保留 UI 狀態(tài)時(shí)調(diào)用 onPause()//暫停當(dāng)前活動(dòng) activity,提交持久數(shù)據(jù)的改變,停止動(dòng)畫和其他占用 CPU 資源的 東西,由于下一個(gè) activity 在這個(gè)方法返回之前不會(huì) resume,所以這個(gè)方法的代碼執(zhí)行要快。 onStop()//activity 不再可見時(shí)調(diào)用 onDestroy()//在 Activity 銷毀錢被調(diào)用的最后一個(gè)方法。?
??? 橫豎屏切換時(shí)候 Activity 的生命周期。
1、不設(shè)置 Activity 的 android:configChanges 時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r 會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次 2、設(shè)置 Activity 的 android:configChanges="orientation"時(shí),切屏還是會(huì)重新調(diào)用各個(gè)生命 周期,切橫、豎屏?xí)r只會(huì)執(zhí)行一次 3、設(shè)置 Activity 的 android:configChanges="orientation|keyboardHidden"時(shí),切屏不會(huì)重 新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行 onConfigurationChanged 方法?
??? 如何將一個(gè) Activity 設(shè)置成窗口的樣式。
1、在你的 styles.xml 文件中可以新建一如下的類似 Dialog 的 style <style name="Theme.FloatActivity" parent="android:style/Theme.Dialog">? </style> 2、在 AndroidManifest.xml 中在你需要顯示為窗口的 activity 中添加如下屬性: android:theme="@style/Theme.FloatActivity" 即可
也可以直接添加您對(duì)應(yīng)需要展示為 Dialog style 的 Activity 的 android:theme 屬性值為 android:theme="@android:style/Theme.Dialog"。?
??? 你后臺(tái)的 Activity 被系統(tǒng)回收怎么辦?
系統(tǒng)會(huì)幫我們記錄下回收前 Activity 的狀態(tài),再次調(diào)用被回收的 Activity 就要重新調(diào)用 onCreate()方法,不同于直接啟動(dòng)的是這回 onCreate()里是帶上參數(shù) savedInstanceState。 savedInstanceState是一個(gè)Bundle對(duì)象,你基本上可以把他理解為系統(tǒng)幫你維護(hù)的一個(gè)Map 對(duì)象,我們使用 savedInstanceState 可以恢復(fù)到回收前的狀態(tài)。?
??? 如何退出 Activity?如何安全退出已調(diào)用多個(gè) Activity 的 Application?
用 finish()方法退出 activity. 在 2.1 之前,可以使用 ActivityManager 的 restartPackage 方法。 它可以直接結(jié)束整個(gè)應(yīng)用。在使用時(shí)需要權(quán)限 android.permission.RESTART_PACKAGES。 在 2.2,這個(gè)方法失效了,可使用以下幾個(gè)人工的方法 1、記錄打開的 Activity: 每打開一個(gè) Activity,就記錄下來。在需要退出時(shí),關(guān)閉每一個(gè) Activity 即可。 2、發(fā)送特定廣播: 在需要結(jié)束應(yīng)用時(shí),發(fā)送一個(gè)特定的廣播,每個(gè) Activity 收到廣播后,關(guān)閉即可。?
??? 如果后臺(tái)的 Activity 由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)? 被回收前調(diào)用 onSaveInstanceState()方法保存當(dāng)前狀態(tài)。?
??? 兩個(gè) Activity 之間怎么傳遞數(shù)據(jù)? 在 Intent 的對(duì)象中增加要傳遞的參數(shù)既可。? 在 Intent 的對(duì)象的請(qǐng)求中加入鍵值對(duì),對(duì)象名字.putExtra("鍵值對(duì)的名字","鍵值對(duì)的值");? 在另一個(gè) Activity 中將 Intent 請(qǐng)求中的數(shù)據(jù)取出來:?? Intent intent=getIntent();//?? String value = intent.getStringExtra("testIntent");//將 testIntent 對(duì)應(yīng)的值賦值給 value?
??? 怎么在啟動(dòng)一個(gè) Activity 時(shí)就啟動(dòng)一個(gè) service? 將啟動(dòng) Service 的語句放在 onCreate()方法中。?
??? 同一個(gè)程序,但不同的 Activity 是否可以放在不同的 Task 任務(wù)棧中? 可以放在不同的 Task 中。需要為不同的 activity 設(shè)置不同的 taskaffinity 屬性,啟動(dòng) activity 的 Intent 需要包含 FLAG_ACTIVITY_NEW_TASK 標(biāo)記。?
??? Activity 怎么和 service 綁定,怎么在 activity 中啟動(dòng)自己對(duì)應(yīng)的 service? 1、Activity 能進(jìn)行綁定得益于 Service 的接口。為了支持 Service 的綁定,實(shí)現(xiàn) onBind 方法。 2、Service 和 Activity 的連接可以用 ServiceConnection 來實(shí)現(xiàn)。你需要實(shí)現(xiàn)一個(gè)新的 ServiceConnection,重寫 onServiceConnected 和 onServiceDisconnected 方法,一旦連接 建立,你就能得到 Service 實(shí)例的引用。 3、執(zhí)行綁定,調(diào)用 bindService 方法,傳入一個(gè)選擇了要綁定的 Service 的 Intent(顯式或 隱式)和一個(gè)你實(shí)現(xiàn)了的 ServiceConnection 實(shí)例?
???
總結(jié)
以上是生活随笔為你收集整理的Activity的知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 显示intent的使用讲解
- 下一篇: Java平台架构