經典Android面試題

來源:互聯網
上載者:User

標籤:

1.解釋下在單執行緒模式中Message,Handler,Message Queue,Looper之間的關係。

  主線程中,主線程啟動時會調用Looper.prepare()方法,會初始化一個Looper,放入Threadlocal中,接著調用Looper.loop()遍曆Message Queue;  Handler的建立依賴與當前線程中的Looper,如果當前線程沒有Looper則必須調用Looper.prepare()。Handler,sendMessage到MessageQueue,Looper不斷從MessageQueue中取出訊息,回調handleMeaage方法。

2.記憶體溢出和記憶體流失的區別?何時會產生記憶體流失?記憶體最佳化有哪些方法?

      記憶體溢出:應用程式運行時需要的記憶體,超出了它可用的最大記憶體

  記憶體流失:針對某一記憶體空間的使用,使用完成後沒有釋放。

  記憶體最佳化:Android中容易記憶體溢出的部分,就是圖片的載入,我們可以使用圖片的壓縮加上使用LruCache緩衝的方法來控製圖片所能夠使用的記憶體

  除此之外,對於比較耗資源的對象及時的關閉,比如service、conn、各類感應器、Database

3.AsyncTask使用在哪些情境?它的缺陷是什嗎?如何解決?

  AsyncTask運用的情境是需要進行一些耗時的操作,耗時操作完成時更新主線程,或者在操作過程中對主線程的UI進行更新

缺陷:AsyncTask中維護著一個長度為128的線程池,同時可以執行5個背景工作執行緒,還有一個緩衝隊列,當線程池中已有128個線程,緩衝隊列已滿,如果此時向線程提交任務,將會拋出RejectedExecutionException

處理:由一個線程來處理AsyncTask的調用判斷線程池是否滿了,如果滿了線程睡眠否則請求AsyncTask繼續處理。

4.AsyncTask實現的原理是什嗎?

 

 

  

 

經典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.