Android常见面试题(一)
ANDROID(一)
Activity
1.什么是Activity? 請描述一下生命周期
Activity:
一個Activity是一個應(yīng)用程序組件,提供一個屏幕,用戶可以用來交互為了完成某項任務(wù),例如撥號、拍照、發(fā)送email、看地圖。每一個activity被給予一個窗口,在上面可以繪制用戶接口。窗口通常充滿屏幕,但也可以小于屏幕而浮于其它窗口之上
一個程序一般由多個Activity組成,各activities之間關(guān)系很松散,它們之間沒有直接的關(guān)聯(lián)。必須有一個activity被指定為Main activity,它是程序啟動時首先顯示的界面。每個activity都可以隨意啟動其它的activity。每當(dāng)一個activity被啟動,則前一個activity就被停止。一個程序中的所有啟動的activity都被放在一個棧中,所以被停止的activity并沒有銷毀,而在存于棧中。新啟動的activity先被存放于棧中,然后獲得輸入焦點。在當(dāng)前活動的activity上點返回鍵,它被從棧中取出,然后銷毀,然后上一個activity被恢復(fù)。當(dāng)一個activity因為新的activity啟動而被停止時,它會收到狀態(tài)變化的通知,這樣的變化有多個,每個都會引起系統(tǒng)調(diào)用一個相應(yīng)的回調(diào)方法以通知activity,這些回調(diào)方法被統(tǒng)稱為“生命周期回調(diào)方法”。這些回調(diào)方法分別在Activity被創(chuàng)建、停止、恢復(fù)、銷毀時被調(diào)用。
生命周期:
在 android 中,Activity 擁有四種基本狀態(tài):
當(dāng)一個 Activity 實例被創(chuàng)建、銷毀或者啟動另外一個 Activity 時,它在這四種狀態(tài)之間進(jìn)行轉(zhuǎn)換,這種轉(zhuǎn)換的發(fā)生依賴于用戶程序的動作。下圖說明了 Activity 在不同狀態(tài)間轉(zhuǎn)換的時機和條件:
圖 1. Activity 的狀態(tài)轉(zhuǎn)換
圖 3. 這些方法的調(diào)用時機
?
共有七個周期函數(shù):?
void onCreate(Bundle savedInstanceState)?
void onStart()?
void onRestart()?
void onResume()?
void onPause()?
void onStop()?
void onDestroy()?
在Activity顯示的過程中會依次調(diào)用OnCreate、onStart和OnResume,在Activity銷毀的過程中,會依次調(diào)用onPause、onStop和onDestroy.在執(zhí)行onStop過程中Activity重新獲得了焦點,系統(tǒng)會調(diào)用
onRestart方法,之后調(diào)用onStart和onResume方法
1.完整生命周期:???? 即一個activity從出現(xiàn)到消失,對應(yīng)的周期方法是從onCreate到onDestroy?
2.可見生命周期:???? 從onStart()到onStop()方法,在這個周期中,用戶可以看見Activity,但不一定能夠與之交互,這兩個方法可以隨著狀態(tài)的變化被執(zhí)行多次。?
3.前景生命周期:????? 從onResume()到onPause()方法,在這個周期中,Activity處在其它Activity之前,即在Activity棧的最頂端,負(fù)責(zé)與用戶進(jìn)行交互,伴隨著狀態(tài)的變化,這兩個方法可以被執(zhí)行多次
?
2.Activity調(diào)用的幾種方法
顯示啟動Activity
顯示啟動activity
Intent intent = new Intent(this,MyActivity.class);
startActivity(intent);
啟動一個activity并獲取結(jié)果
startActivityForResult();
(回來時調(diào)用onActivityResult())
隱式啟動Activity
指定Activity Action:
例如,你想讓用戶發(fā)送一個電子郵件,你可以創(chuàng)建以下的Intent:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);
關(guān)閉Activity
? ? ?Activity可以內(nèi)部調(diào)用finish()方法關(guān)閉它自己,也可以調(diào)用finishActivity()方法關(guān)閉其它的activity、
3.在Activity之間如何傳遞數(shù)據(jù)
四種方法:
Intent對象
例如:Intent intent = new Intent(this,MyActivity.class);
intent.putExtra("intent_int",300);
startActivity(intent);
獲取:
int demo = getIntent().getExtras().getInt("intent_int");
靜態(tài)變量
將類的成員定義成public static
剪切板
不過只能傳文本數(shù)據(jù)以及Intent對象支持的數(shù)據(jù)
全局對象
可以為應(yīng)用程序定義一個全局變量,繼承application
4.兩個Activity之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法
onCreate():在activity生命周期開始時調(diào)用
onRestoreInstanceState():用來恢復(fù)UI狀態(tài)
onRestart():當(dāng)activity重新啟動時調(diào)用
onStart():當(dāng)activity對用戶即將可見時調(diào)用
onResume():當(dāng)activity與用戶交互時,繪制界面
onSaveInstanceState():當(dāng)activity即將移除棧頂保留UI狀態(tài)時被調(diào)用
onPause():暫停當(dāng)前活動的activity,提交持久數(shù)據(jù)的改變,停止動畫和其他占用CPu資源的東西,由于下一個activity在這個方法返回之前不會resume,所以這個方法的代碼執(zhí)行要快
onStop():activity不再可見時調(diào)用
onDestroy():在activity銷毀棧時被調(diào)用的最后一個方法
5.橫豎屏幕切換時候activity的生命周期
①不設(shè)置activity的android:configChanges時,切屏?xí)匦抡{(diào)用各個生命周期,切橫屏?xí)r會執(zhí)行一次,且豎屏?xí)r會執(zhí)行兩次
②設(shè)置activity的android:configChanges=”orientation"時,切屏還是會調(diào)用各個生命周期,切橫屏,豎屏?xí)r只會執(zhí)行一次
③設(shè)置activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfigurationChanged方法
6.你后臺的Activity被系統(tǒng)回收怎么辦?
系統(tǒng)會幫我們記錄下回收之前Activity的狀態(tài),再次調(diào)用被回收的Activity就要重新調(diào)用onCreate()方法,不同于直接啟動的是這回onCreate()里面帶上參數(shù)savedInstanceState,savedInstanceState是一個Bundle對象,基本上可以把它理解為系統(tǒng)幫你維護(hù)的一個map對象,使用它可以恢復(fù)到回收前的狀態(tài)
7.如何將一個activity設(shè)置為窗口的樣式
①在你的style.xml文件中可以新建一如下的類似Dialog的style:
<style name="Theme.FloatActivity" parent="android:style/Theme.Dialog></style>
②在AndroidManifest.xml中在你需要顯示為窗口的activity中添加如下屬性:
android:theme="@style/Theme.FloatActivity"即可
也可以直接添加對應(yīng)需要展示為Dialog style的activity的android:theme屬性值為:android:theme="@android:style/Theme.Dialog"
?
轉(zhuǎn)載于:https://www.cnblogs.com/daimingming/p/3352425.html
總結(jié)
以上是生活随笔為你收集整理的Android常见面试题(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20131003国庆作业例4-4,4-5
- 下一篇: Linux系统监控工具