Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android基礎面試題

Android基礎面試題

編輯:關於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自動變量,即動態局部變量,屬於動態存儲類別,占動態存儲空間,函數調用結束後即釋放)。靜態變量雖在程序的整個執行過程中始終存在,但是在它作用域之外不能使用。


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

靜態方法是使用公共內存空間的,就是說所有對象都可以直接引用,不需要創建對象再使用該方法。


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved