Android基礎面試題

來源:互聯網
上載者:User

標籤:android

1. 轉屏時候Activity的生命週期

1.1 建立一個Activity,並把各個生命週期列印出來

1.2 運行Activity,得到如下資訊

onCreate-->
onStart-->
onResume-->

1.3 按crtl+f12切換成橫屏時

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

1.4 再按crtl+f12切換成豎屏時,發現列印了兩次相同的log

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

1.5 修改AndroidManifest.xml,把該Activity添加 android:configChanges="orientation",執行步驟3

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

1.6  再執行步驟4,發現不會再列印相同資訊,但多列印了一行onConfigChanged

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onConfigurationChanged-->

1.7 把步驟5的android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",執行步驟3,就只列印onConfigChanged

onConfigurationChanged-->

1.8 執行步驟4

onConfigurationChanged-->
onConfigurationChanged-->

總結:

①不設定Activity的android:configChanges時,切屏會重新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

②設定Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命週期,切橫、豎屏時只會執行一次

③設定Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法

2. View如何重新整理

3. 類變數和和函數變數有什麼區別

類變數也叫全域變數,函數變數也局部變數,兩者的範圍不同。全域變數作用於整個類,局部變數作用於某個方法,方法結束後,變數消失。
4. Java gc記憶體回收機制
Java GC(Garbage Collection,垃圾收集,記憶體回收)機制,是Java與C++/C的主要區別之一,作為Java開發人員,一般不需要專門編寫記憶體回收和垃圾清理代 碼,對記憶體泄露和溢出的問題,也不需要像C程式員那樣戰戰兢兢。這是因為在Java虛擬機器中,存在自動記憶體管理和垃圾清掃機制。概括地說,該機制對 JVM(Java Virtual Machine)中的記憶體進行標記,並確定哪些記憶體需要回收,根據一定的回收策略,自動的回收記憶體,永不停息(Nerver Stop)的保證JVM中的記憶體空間,放置出現記憶體泄露和溢出問題。
5. Andriod 遇到OOM問題,該怎麼解決?

導致OOM 有以下幾種情況:

① 應用中需要載入大對象,例如Bitmap

 解決方案:當我們需要顯示大的bitmap對象或者較多的bitmap的時候,就需要進行壓縮來防止OOM問題。我們可以通過設定BitmapFactory.Optiions的inJustDecodeBounds屬性為true,這樣的話不會載入圖片到記憶體中,但是會將圖片的width和height屬性讀取出來,我們可以利用這個屬性來對bitmap進行壓縮。Options.inSampleSize 可以設定壓縮比

②持有無用的對象使其無法被gc,導致Memory Leak . 也就是我們說的記憶體流失。記憶體泄露初期沒有什麼現象,但是最終會導致記憶體溢出。

6. ANR的幾種情況,如何避免

①Activity主線程 (事件處理線程” / “UI線程) 在5秒內沒有響應輸入事件

②BroadcastReceiver 沒有在10秒內完成返回

③Service也是跑在UI Thread裡的,只是比activity報ANR的閥值要大些,15秒沒有完成返回,出現ANR。

解決辦法都是不在UI線程中做耗時的操作,一般都是啟動子線程,如果要更新UI介面,可以用Handler和Message來完成。

7. 靜態變數和靜態方法

靜態變數 類型說明符是static。

靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的待用資料區(在 靜態儲存區內分配儲存單元),該地區中的資料在整個程式的運行期間一直佔用這些儲存空間(在程式整個運行期間都不釋放),也可以認為是其記憶體位址不變,直 到整個程式運行結束(相反,而auto自動變數,即動態局部變數,屬於動態儲存裝置類別,占動態儲存裝置空間,函數調用結束後即釋放)。靜態變數雖在程式的整個執行過程中始終存在,但是在它範圍之外不能使用。


靜態變數並不是說其就不能改變值,不能改變值的量叫常量。 其擁有的值是可變的 ,而且它會保持最新的值。說其靜態,是因為它不會隨著函數的調用和退出而發生變化。即上次調用函數的時候,如果我們給靜態變數賦予某個值的話,下次函數調用時,這個值保持不變。

靜態方法是使用公用記憶體空間的,就是說所有對象都可以直接引用,不需要建立對象再使用該方法。



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android基礎面試題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.