Android 四大組件------Activity
一.定義軟件打開的主activity
當用戶點開軟件時,系統會默認調用app中聲明為“launch”(或者“main”)的activity中的onCreate()方法。我們一般在AndroidManifest.xml中定義主activity。
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
關於activity相關的面試題:
1.如果新Activity是透明主題時,舊Activity會不會走onStop
不會!舊Activity處於Paused狀態。
2.TaskAffinity 是什麽?
每個activity都有taskAffinity屬性,這個屬性指出了它希望進入的Task。標識Activity任務棧名稱的屬性:TaskAffinity,默認為應用包名。
3.Android Service與Activity之間通信方式有哪些?
- Binder
- 廣播
- EventBus
4.Activity啟動方式
- Intent
- adb shell am指令
am啟動一個activity :
adb shell am start com.example.fuchenxuan/.MainActivity
am發送一個廣播,使用action:
adb shell am broadcast -a magcomm.action.TOUCH_LETTER
5.如何獲取當前屏幕Activity?
使用ActivityLifecycleCallbacks,詳細。
6.Activity的四種啟動模式?
啟動模式有4種,分別為standard、singleTop、singleTask、singleInstance;
- standard:每次激活Activity時(startActivity),都創建Activity實例,並放入任務棧;
- singleTop:如果某個Activity自己激活自己,即任務棧棧頂就是該Activity,則不需要創建,其余情況都要創建Activity實例;
- singleTask:如果要激活的那個Activity在任務棧中存在該實例,則不需要創建,只需要把此Activity放入棧頂,並把該Activity以上的Activity實例都pop;
- singleInstance:如果應用1的任務棧中創建了MainActivity實例,如果應用2也要激活MainActivity,則不需要創建,兩應用共享該Activity實例;
7.如何退出 Activity?如何安全退出已調用多個 Activity 的 Application?
退出單個activity:
- 通常情況用戶退出一個 Activity 只需按返回鍵,我們寫代碼想退出 activity 直接調用 finish()方法就行。
- 殺死該進程:killprocess(Process.mid)
- 終止正在運行的虛擬機:system.exit()
退出整個應用:
- 制造拋異常導致整個程序退出
- 發送特定廣播:
在需要結束應用時,發送一個特定的廣播,每個 Activity 收到廣播後,關閉 即可。
//給某個 activity 註冊接受接受廣播的意圖 registerReceiver(receiver, filter)
//如果過接受到的是 關閉 activity 的廣播 activity finish()掉
- 遞歸退出
就調用 finish()方法 把當前的 在打開新的 Activity 時使用 startActivityForResult,然後自己加標誌,在 onActivityResult 中處理,遞歸關閉。
- 通過 intent 的 flag 來實現 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)激活一個新的 activity。 此時如果該任務棧中已經有該 Activity,那麽系統會把這個 Activity 上面的所有 Activity 幹掉。其實相當於給 Activity 配置的啟動模式為 SingleTop。
- 記錄打開的 Activity:
每打開一個 Activity,就記錄下來。在需要退出時,關閉每一個 Activity
附錄:
activity生命周期:
Android 四大組件------Activity