【Android進階】Android面試題目整理與講解

來源:互聯網
上載者:User

標籤:des   android   blog   http   io   ar   使用   java   for   

這一篇文章專門整理一下研究過的Android面試題,內容會隨著學習不斷的增加,如果答案有錯誤,希望大家可以指正

1.簡述Activity的生命週期 當Activity開始啟動的時候,首先調用onCreate(),onStart(),onResume()方法,此時Activity對使用者來說,是可見的狀態 當Activity從可見狀態變為被Dialog遮擋的狀態的時候,會調用onPause()方法,此時的Activity對使用者可見,但是不能相應使用者的點擊事件 當Activity從可見狀態變為被其他的Activity完全覆蓋或者是點擊Home進入背景時候,會依次調用onPause(),onStop()方法,如果在這個期間,系統記憶體不足,導致Activity被回收的話,還會調用onDestory()方法 當Activity從被Dialog遮擋的狀態恢複的時候,會調用onResume()方法,從而恢複可以點擊的狀態 當Activity從被其他Activity遮擋或者是進入後台狀態恢複,而且沒有被系統回收的時候,會依次調用onRestart(),onStart(),onResume(),恢複到可以與使用者進行互動的狀態 當Activity從被其他Activity遮擋或者進入後台,而且被系統回收的時候,相當於重新開啟一個Activity,既調用onCreate(),onStart(),onResume()方法,從而可以與使用者進行互動 在onPause()方法執行後,系統會停止動畫等消耗 CPU 的操作,同時我們應該在這裡儲存資料,因為這個時候程式的優先順序降低,有可能被系統收回。在這裡儲存的資料,應該在 onResume 裡讀出來,幫使用者恢複之前的狀態。 

在onDestroy()執行後,activity就被真的幹掉,可以用 isFinishing()來判斷它,如果此時有 Progress Dialog顯示,我們應該在onDestroy()裡 cancel 掉,否則線程結束的時候,調用Dialog 的 cancel 方法會拋異常。

 

2.Intent啟動Activity有幾種方式,如何??Intent啟動Activity有兩種方式,分別為顯式意圖,隱式意圖第一種,顯的實現。 [java] view plaincopyprint? 
  1. Intent intent = new Intent(this,OtherActivity.class);    
  2. startActivity(intent);    

顯式意圖還有另外一種形式。

[java] view plaincopyprint? 
  1. Intent intent = new Intent();    
  2. ComponentName component = new ComponentName(this, OtherActivity.class);    
  3. intent.setComponent(component);    
  4. startActivity(intent);    

其實這兩種形式其實是一樣的,我們看一下Intent建構函式的代碼

 

 

[java] view plaincopyprint? 
  1. public Intent(Context packageContext, Class<?> cls) {    
  2.         mComponent = new ComponentName(packageContext, cls);    
  3. }    

 

 

這樣我們就一目瞭然了,其實我們經常使用的Intent的構造方法是第二種方式的簡化版  第二種,是隱式意圖的實現。首先我們看一下隱式意圖的調用方式 [java] view plaincopyprint? 
  1. Intent intent = new Intent();  
  2. intent.setAction("other");  
  3. startActivity(intent);  
隱式意圖是通過setAction來進行區分到底跳轉到哪一個介面,那麼我們肯定要在需要跳轉的版面設定一標誌,我們需要在AndroidManifest.xml中對這個進行設定 [java] view plaincopyprint? 
  1. <activity android:name="com.example.lifecicledemo.OtherActivity" >  
  2.      <intent-filter>  
  3.          <action android:name="other" />  
  4.   
  5.          <category android:name="android.intent.category.DEFAULT" />  
  6.      </intent-filter>  
  7. </activity>  

這樣當我們使用setAction的時候,就可以知道我們到底是想跳轉到哪一個頁面了。3.Android中擷取圖片有哪幾種方式方式一 [java] view plaincopyprint? 
  1. Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);  
  2.         img.setImageDrawable(drawable);  

方式二

[java] view plaincopyprint? 
  1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(),  
  2.                 R.drawable.ic_launcher);  
  3. img.setImageBitmap(bitmap);  


方式三

 

 

[java] view plaincopyprint? 
  1. AssetManager assetManager = getResources().getAssets();  
  2. try {  
  3.     InputStream is = assetManager.open("ic_launcher.png");  
  4.     Bitmap bitmap = BitmapFactory.decodeStream(is);  
  5.     img.setImageBitmap(bitmap);  
  6. } catch (IOException e) {  
  7.     e.printStackTrace();  
  8. }  


方式四

 

 

[java] view plaincopyprint? 
  1. AssetManager assetManager = getResources().getAssets();  
  2. try {  
  3.     InputStream is = assetManager.open("ic_launcher.png");  
  4.     Drawable drawable = Drawable.createFromStream(is, null);  
  5.     img.setImageDrawable(drawable);  
  6. } catch (IOException e) {  
  7.     e.printStackTrace();  
  8. }  

 

1. ArrayList,Vector, LinkedList 的儲存效能和特性ArrayList 和 Vector 都是使用數組方式儲存資料,此數組元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按 序號索引元素,但是插入元素要涉及數組元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector 由於使用了 synchroni zed 方法(安全執行緒),通常效能上較 ArrayList 差,而 LinkedList 使用雙向鏈表實現儲存,按序號索引資料需要進行前向或後 向遍曆,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。 2.Collection 和 Collections 的區別Collection 是集合類的上級介面,繼承與他的介面主要有 Set 和 List. Collections 是針對集合類的一個協助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、安全執行緒化等操作。3.HashMap 和 Hashtable 的區別HashMap 是 Hashtable 的輕量級實現(非安全執行緒的實現),他們都完成了 Map 介面,主要區別在於 HashMap 允許空(null)索引值(key),由於非安全執行緒,效率上可能高於 Hashtable。 HashMap 允許將 null 作為一個 entry 的 key 或者 value,而 Hashtable 不允許。 HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。因為 contains 方法容易讓人引起誤解。 Hashtable 繼承自 Dictionary 類,而 HashMap 是 Java1.2 引進的 Map interface 的一個實現。 最大的不同是,Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多個線程訪問 Hashtable 時,不需要自己為它的 方法實現同步,而 HashMap 就必須為之提供外同步。Hashtable 和 HashMap 採用的 hash/rehash 演算法都大概一樣,所以效能不會有很大的差異。 4.sleep() 和 wait() 有什麼區別sleep 是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時 後會自動回復。調用 sleep 不會釋放對象鎖。 wait 是 Object 類的方法,對此對象調用 wait 方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發 出 notify 方法(或 notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。 5.Overload 和 Override 的區別Overloaded 的方法是否可以改變傳回值的類型? 方法的重寫 Overriding 和重載 Overloading 是 Java 多態性的不同表現。重寫 Overriding 是父類與子類之間多態性的一種表現,重載 Overloading 是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類 中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded 的 方法是可以改變傳回值的類型。 6.同步和非同步有何異同,在什麼情況下分別使用他們?如果資料將線上程間共用。例如正在寫的資料以後可能被另一個線程讀到,或者正在讀的資料可能已經被另一個線程寫過了, 那麼這些資料就是共用資料,必須進行同步存取。 當應用程式在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步編程, 在很多情況下採用非同步途徑往往更有效率。



 

【Android進階】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.