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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android面试题之Activity篇

發(fā)布時間:2023/12/18 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android面试题之Activity篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Activity篇目錄

  • 前言
  • 一、 Activity
    • 1、什么是 Activity?
    • 2、請描述一下 Activity 生命周期
    • 3、請描述一下Activity的四個狀態(tài)
    • 4、兩個 Activity 之間傳遞數(shù)據(jù),除了 intent,廣播接收者,content provider 還有啥?
    • 5、Android 中的 Context, Activity,Appliction 有什么區(qū)別?
    • 6、Context 是什么?
    • 7、如何保存 Activity 的狀態(tài)?
    • 8、橫豎屏切換時 Activity 的生命周期
    • 9、兩個 Activity 之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法?
    • 10、如何將一個 Activity 設置成窗口的樣式
    • 11、Activity 的四種啟動模式,singletop 和 singletask 區(qū)別是什么?
    • 12、Activity 的四種啟動模式,一般書簽的使用模式是 singletop,那為什么不使用 singletask?
    • 13、如何退出 Activity ?如何安全退出已調(diào)用多個 Activity 的Application?
    • 14、Activity-Window-View三者的關系
  • 關于整理問題


前言

秋招在即,計蒙準備在國慶假期結(jié)束前整理一套Android初級面試題籍,希望對大家有所幫助


提示:以下是本篇文章正文內(nèi)容

一、 Activity

1、什么是 Activity?

四大組件之一,一般的,一個用戶交互界面對應一個 activity

setContentView() ,// 要顯示的布局

activity 是 Context 的子類,同時實現(xiàn)了 window.callback 和 keyevent.callback, 可以處理與窗體用戶交互的事件

button.setOnclickLinstener{ }//點擊事件

我在開發(fā)常用的的有 FragmentActivitiy,ListActivity ,PreferenceActivity ,TabAcitivty 等…如果界面有共同的特點或者功能的時候,還會自己定義一個 BaseActivity


2、請描述一下 Activity 生命周期

Activity 從創(chuàng)建到銷毀有多種狀態(tài),從一種狀態(tài)到另一種狀態(tài)時會激發(fā)相應的回調(diào)方法,這些回調(diào)方法包括:

onCreate onStart onResume onPause onStop onDestroy,onRestart

這些方法大都是兩兩對應的

onCreate 創(chuàng)建與 onDestroy 銷毀 onStart 可見與 onStop 不可見 onResume 可編輯(即焦點)與 onPause

3、請描述一下Activity的四個狀態(tài)

running-poused-stopped-killed

1.running->當前顯示在屏幕的activity(位于任務棧的頂部),用戶可見狀態(tài)。
2.poused->依舊在用戶可見狀態(tài),但是界面焦點已經(jīng)失去,此Activity無法與用戶進行交互。
3.stopped->用戶看不到當前界面,也無法與用戶進行交互 完全被覆蓋.
4.killed->當前界面被銷毀,等待這系統(tǒng)被回收


4、兩個 Activity 之間傳遞數(shù)據(jù),除了 intent,廣播接收者,content provider 還有啥?

1)利用 static 靜態(tài)數(shù)據(jù),public static 成員變量
2)利用外部存儲的傳輸,例如 File 文件存儲

SharedPreferences 首選項Sqlite 數(shù)據(jù)庫

5、Android 中的 Context, Activity,Appliction 有什么區(qū)別?

  • 相同:Activity 和 Application 都是 Context 的子類。 Context
    從字面上理解就是上下文的意思,在實際應用中它也確實是起到了管理上下文環(huán)境中各個參數(shù)和變量的總用,方便我們可以簡單的訪問到各種資源。
  • 不同:維護的生命周期不同。 Context 維護的是當前的 Activity 的生命周期,Application維護的是整個項目的生命周期。 使用 context 的時候,小心內(nèi)存泄露,防止內(nèi)存泄露,注意一下幾個方面:

1.不要讓生命周期長的對象引用 activity context,即保證引用 activity 的對象要與 activity 本身生命周期是一樣的。

2.對于生命周期長的對象,可以使用 application,context。

3.避免非靜態(tài)的內(nèi)部類,盡量使用靜態(tài)類,避免生命周期問題,注意內(nèi)部類對外部對象引用導致的生命周期變化。


6、Context 是什么?

1、它描述的是一個應用程序環(huán)境的信息,即上下文。

2、該類是一個抽象(abstract class)類,Android 提供了該抽象類的具體實現(xiàn)類(ContextIml)。

3、通過它我們可以獲取應用程序的資源和類,也包括一些應用級別操作,例如:啟動一個 Activity,發(fā)送廣播,接受 Intent,信息,等。


7、如何保存 Activity 的狀態(tài)?

Activity 的狀態(tài)通常情況下系統(tǒng)會自動保存的,只有當我們需要保存額外的數(shù)據(jù)時才需要使用到這樣的功能。

  • 一般來說, 調(diào)用 onPause()和 onStop()方法后的 activity 實例仍然存在于內(nèi)存中, activity的所有信息和狀態(tài)數(shù)據(jù)不會消失, 當 activity 重新回到前臺之后, 所有的改變都會得到保留。

  • 但是當系統(tǒng)內(nèi)存不足時, 調(diào)用 onPause()和 onStop()方法后的 activity 可能會被系統(tǒng)摧毀, 此時內(nèi)存中就不會存有該activity 的實例對象了。如果之后這個 activity 重新回到前臺, 之前所作的改變就會消失。為了避免此種情況的發(fā)生 ,我們可以覆寫 onSaveInstanceState() 方法。onSaveInstanceState()方法接受一個 Bundle類型的參數(shù), 開發(fā)者可以將狀態(tài)數(shù)據(jù)存儲到這個Bundle對象中, 這樣即使activity被系統(tǒng)摧毀,當用戶重新啟動這個activity而調(diào)用它的onCreate()方法時, 上述的 Bundle 對象會作為實參傳遞給onCreate()方法, 開發(fā)者可以從 Bundle 對象中取出保存的數(shù)據(jù), 然后利用這些數(shù)據(jù)將 activity恢復到被摧毀之前的狀態(tài)。

  • 需要注意的是, onSaveInstanceState()方法并不是一定會被調(diào)用的, 因為有些場景是不需要保存狀態(tài)數(shù)據(jù)的. 比如用戶按下 BACK 鍵退出 activity 時, 用戶顯然想要關閉這個 activity, 此時是沒有必要保存數(shù)據(jù)以供下次恢復的, 也就是 onSaveInstanceState() 方法不會被調(diào)用. 如果調(diào)用onSaveInstanceState()方法, 調(diào)用將發(fā)生在 onPause()或 onStop()方法之前。

@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stub super.onSaveInstanceState(outState); }

8、橫豎屏切換時 Activity 的生命周期

此時的生命周期跟清單文件里的配置有關系。

  • 不設置 Activity 的 android:configChanges 時,切屏會重新調(diào)用各個生命周期默認首先銷毀當前activity,然后重新加載。

  • 設置 Activity的android:configChanges="orientation|keyboardHidden|screenSize"時,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行 onConfigurationChanged 方法。

通常在游戲開發(fā), 屏幕的朝向都是寫死的。


9、兩個 Activity 之間跳轉(zhuǎn)時必然會執(zhí)行的是哪幾個方法?

一般情況下比如說有兩個activity,分別叫A,B
當在A里面激活B組件的時候, A會調(diào)用 onPause()方法,然后 B 調(diào)用 onCreate() ,onStart(), onResume()。
這個時候 B 覆蓋了窗體, A 會調(diào)用 onStop()方法. 如果 B 是個透明的,或者是對話框的樣式, 就不會調(diào)用 A 的 onStop()方法。


10、如何將一個 Activity 設置成窗口的樣式

只需要給 Activity 配置如下屬性即可。

android:theme="@android:style/Theme.Dialog"

11、Activity 的四種啟動模式,singletop 和 singletask 區(qū)別是什么?

singleTop 跟 standard 模式比較類似。唯一的區(qū)別就是,當跳轉(zhuǎn)的對象是位于棧頂?shù)?activity(應該可以理解為用戶眼前所 看到的 activity)時,程序?qū)⒉粫梢粋€新的 activity 實例,而是直接跳到現(xiàn)存于棧頂?shù)哪莻€ activity 實例。拿上面的例子來說,當 Act1 為 singleTop 模式時,執(zhí)行跳轉(zhuǎn)后棧里面依舊只有一個實例,如果現(xiàn)在按返回鍵程序?qū)⒅苯油顺觥?/p>


12、Activity 的四種啟動模式,一般書簽的使用模式是 singletop,那為什么不使用 singletask?

singleTask 模式和 singleInstance 模式都是只創(chuàng)建一個實例的。在這種模式下,無論跳轉(zhuǎn)的對象是不是位于棧頂?shù)?activity,程序都不會生成一個新的實例(當然前提是棧里面已經(jīng)有這個實例)。這種模式相當有用,在以后的多 activity 開發(fā)中,常會因為跳轉(zhuǎn)的關系導致同個頁面生成多個實例,這個在用戶體驗上始終有點不好,而如果你將對應的 activity 聲明為 singleTask 模式,這種問題將不復存在。在主頁的 Activity 很常用


13、如何退出 Activity ?如何安全退出已調(diào)用多個 Activity 的Application?

1、通常情況用戶退出一個 Activity 只需按返回鍵,我們寫代碼想退出 activity 直接調(diào)用 finish()方法就行。

2、記錄打開的 Activity:每打開一個 Activity,就記錄下來。在需要退出時,關閉每一個 Activity 即可。

//偽代碼List<Activity> lists ;// 在 application 全局的變量里面 lists = new ArrayList<Activity>();lists.add(this);for(Activity activity: lists){activity.finish();}lists.remove(this);

3、發(fā)送特定廣播:在需要結(jié)束應用時,發(fā)送一個特定的廣播,每個 Activity 收到廣播后,關閉即可。

//給某個 activity 注冊接受接受廣播的意圖registerReceiver(receiver, filter) //如果過接受到的是 關閉 activity 的廣播 就調(diào)用 finish()方法 把當前的 activity finish()掉

4、遞歸退出:在打開新的 Activity 時使用 startActivityForResult,然后自己加標志,在 onActivityResult 中處理,遞歸關閉。

5、其實 也可以通過 intent 的 flag 來實現(xiàn) intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)激活一個新的 activity。此時如果該任務棧中已經(jīng)有該 Activity,那么系統(tǒng)會把這個 Activity 上面的所有 Activity 干掉。其實相當于給 Activity 配置的啟動模式為 SingleTop。


14、Activity-Window-View三者的關系

Activity:是安卓四大組件之一,負責界面展示、用戶交互與業(yè)務邏輯處理;
Window:是負責界面展示以及交互的職能部門,就相當于Activity的下屬,Activity的生命周期方法負責業(yè)務的處理;
View:是放在Window容器的元素,Window是View的載體,View是Window的具體展示。

Activity通過Window來實現(xiàn)視圖元素的展示,window可以理解為一個容器,盛放著一個個的view,用來執(zhí)行具體的展示工作。


關于整理問題

當全部整理完畢后將整理成pdf格式,以方便閱讀,文件獲取如下圖(10月8日后)


總結(jié)

以上是生活随笔為你收集整理的Android面试题之Activity篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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