安卓面試精華(Activity部分)

來源:互聯網
上載者:User

標籤:des   android   style   blog   io   ar   os   使用   sp   

過幾天小弟要去面試了,當然免不了要好好複習下功課,其實很多東西也不是特別清楚,今天都當作一個回顧和鞏固,希望我的這篇文章能對即將去找工作的同學有所協助。

 

1.

Q:什麼是activity?

雖然這個問題現在不流行問了,但是還是做好準備,有備無患嘛。

A:      

1).activity是四大組件之一,一般情況下,一個和使用者互動的介面就對應有一個activity。

2).Activity是Context的子類,同時它實現了Window.callback和keyEvent.callback,正因為如此,人們才能夠實現與介面互動。比如我們熟悉的點擊事件Button.setOnClickListener{}

3).我開發常用的activity有listActivity(資料展示的),TabActivity(製作表格),PreferenceActivity(常用來寫設定介面),有時候一些Activity都有一些共同的特點或者相同功能的時候,我會自己定義一個BaseActivity。

 

2.

Q:請說說Activity的生命週期?這個問題問得還挺多的)。

A:我們三步走:

第一步,解釋:

生命週期描述的是一個類從建立到消亡中會執行的方法,(注意,市講的時一個個會執行的方法),在這個過程中,會針對不同的生命階段調用不同的方法。其實講白了就是一個個方法的執行過程。

第二步,如何執行:

接下來我們就要說都執行了哪些方法:

Activity從建立到銷毀有多種狀態,從一種狀態到另一種狀態會執行相應的方法,包括Oncreate()—建立,OnDestory—銷毀;OnStart()---可見,OnStop()—不可見;OnResume—擷取焦點,OnPause---失去焦點;這些方法是兩兩對應,有一個執行了肯定有對應的執行。

這裡要注意一點,彈出對話方塊不會執行以上任何方法,理由是對話方塊本身就是Activity的一部分。

最後還有一個方法,OnRestart(),這個方法在Activity被onStop後,但是沒有被onDestroy,在再次啟動此Activity時就調用onRestart(而不再調用onCreate)方法;如果是被銷毀了,那就是調用onCreate()方法。

第三步:用自己做過的項目來闡述以上怎麼用法。比如說:

用戶端每次進入某個介面的時候都要看到最新的資料,這個重新整理列表的操作 就放在onStart()的方法裡面.在onStart()裡面寫填充資料的內容就ok了。

做音樂播放器的時候,需要處理來電情況,那就虛報把播放斷點儲存起來,並把播放聲音置位0,這些工作就可以放在OnStop裡面做,然後要啟動的時候,恢複斷點,設定音量這些可以在OnStart裡面做。

我們在讀文檔的時候,會發現onPostResume()和OnPostCreate()這兩個生命週期的方法,不過開發的時候沒有用到過.

 

3.

Q:兩個Activity之間跳轉執行哪些方法?

A:

一般情況比如說有兩個activity,分別叫A,B ,當在A裡面啟用B組件的時候, A 會調用 onPause()方法,然後B 調用onCreate() ,onStart(), OnResume() ,如果B覆蓋了A,我們就看不到A了,那A還會調用OnStop方法,但是如果B透明的,還能看到底下的A的話就不會調用OnStop,因為只有不可見才會調用OnStop();

 

4.

Q說說橫豎屏切換時候Activity的生命週期?

A:這個和配置的資訊清單檔有關係。

1.如果不設定Activity的android:configChanges,切換畫面時候會調用各個生命週期,依次是:

onPause(),onStop(),OnDestory(),onCreate(),OnResume(),onStart();

意思就是你先讓他停止,然後就讓它不可見,這樣就可以銷毀了,然後在重新建立,接著就是回去焦點,擷取到之後就顯示出來。

  1. 當你設定了Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命週期,只會執行onConfigurationChanged方法,通常作遊戲開發,方向都是寫死了的。

 

5.

如何把Activity設定成視窗樣式?

         我們只需要在資訊清單檔裡面配置,你可以使用Android系統提供的dialog樣式,也可以自己在value檔案夾下的style.xml自己定義一個樣式,然後設定到Activity上。

 

 6.

Q:你背景Activity被系統回收怎麼辦?如果背景Activity由於某原因被系統回收可了,如何在被系統回收之前儲存目前狀態?

A:我們來看下Activity是怎麼存放的:我們很容易看到,越是在棧頂的 不容易被回收,系統會優先回收棧底的activity,要想儲存好資料,我們需要複寫一個方法:onSaveInstanceState(Bundle outState),相信這個方法大家都不陌生,因為我們寫Activity的onCreate()基本都見到了調用這個方法super.onCreate(savedInstanceState);其實這個方法調用就是從儲存的資料裡面取出來:每次執行oncreate方法都會看Bundle是不是空的,不是就把資料取出來,取資料調用的就是super.onCreate(savedInstanceState);這個東西在應用在儲存使用者id上很常見。

 

Java代碼  
  1. protected void onSaveInstanceState(Bundle outState) {  
  2.     super.onSaveInstanceState(outState);  
  3.     outState.putLong("id", 1234567890);  
  4. }  

 

 

 

7.Q:如何退出程式?

A:你看我們要是每次退出程式都是 一個一個頁面摁下來,介面一朵使用者體驗就不好了,我們退出可以有兩種常用的方法:

  1. 我們通過拋異常,然後把這個異常的線程殺死的方法,也就是在異常捕獲的代碼中寫android.os.Process.killProcess(android.os.Process.myPid());這樣子就能實現介紹程式而不會出現強制退出的介面。
  2. 第二種就是建立定義一個App類,裡面 整個應用程式的介面,在每一個Activity執行onCreate方法的時候,就把建立的Activity加入到全域的Activity集合裡面,然後在你點擊退出的裡面把Activity一個個從集合裡面移除就行了。具體實現如下:

a)   我們需要寫一個MyApplication.java類

Java代碼  
  1. public class MyApplication extends Application {  
  2. public List<Activity> activities;  
  3. @Override  
  4. public void onCreate() {  
  5.     super.onCreate();  
  6.     activities = new ArrayList<Activity>();  
  7. }  
  8. }  

 

然後在每一個OnCreate裡面添加activity

Java代碼  
  1. @Override  
  2.     protected void onCreate(Bundle savedInstanceState) {  
  3.         super.onCreate(savedInstanceState);  
  4.         MyApplication myApplication = new MyApplication();  
  5.         myApplication.activities.add(this);  
  6. }  

 

 

接下來就是在要實現退出的地方移除所有Activity:

Java代碼  
  1. for(Activity activity: lists)  
  2. {  
  3.     activity.finish();  
  4. }  

 今天不早了,總結了幾個訊息,希望能對大家有協助,明天繼續。

 

安卓面試精華(Activity部分)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.