Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> 概括Android系統存在的種種BUG

概括Android系統存在的種種BUG

編輯:高級開發

android系統還是比較常用的,於是我研究了一下android系統,在這裡拿出來和大家分享一下,希望對大家有用。經過長時間學習android系統的原理,於是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會你更多東西。

就界面Layout來說,這個程序其實和Snake沒有什麼不同,同樣是采用了FrameLayout,而且游戲的主界面由一個自定義的VIEw來實現,這裡是LunarVIEw。讀過上一篇文章的朋友也許會發現,Snake的架構是“定時器+系統調用onDraw”來實現的。

這裡有一個最大的缺陷就是onDraw是由android系統來調用的。我們只能依賴它,卻無法自行控制。這就好比一個黑盒,當然,總是能把我們要的東西給做出來,可卻無法控制其做事的細節。

這對於游戲這樣高效率的東西可是不利的,因此最好的解決之道當然是把繪制這部分工作自己”承包“過來,告別吃大鍋飯的,進入”聯產承包制”時代。此外,由於游戲的本質就是連續兩幀圖片之間發生些許差異,那麼要不斷催生這種差異的發生,只要有某種連續不斷發生的事件在進行就可以。

例如Snake中使用的定時器,就是在不斷地產生這種“差異源”,與此類似,一個線程也是不斷在運行中,通過它也是可以不斷產生這種“差異源”的。如果說Snake中使用的Layout加自定義View是一把小型武器的話,那在SurfaceVIEw對於android中游戲的開發來說就算是重型武器了。

我們使用前者時總是容易把游戲中某個對象(比如上文的每一個方格)當做一個小組件來處理,而後者則根本沒有這種劃分的概念,在它眼中,所有東西都是在Canvas(畫布)中自行繪制出來的(背景,人物等)。

SurfaceView提供直接訪問一個可畫圖的界面,可以控制在界面頂部的子視圖層。SurfaceVIEw是提供給需要直接畫像素而不是使用窗體部件的應用使用的。android圖形系統中一個重要的概念和線索是surface。View及其子類(如TextVIEw, Button)

要畫在surface上。每個surface創建一個Canvas對象(但屬性時常改變),用來管理view在surface上的繪圖操作,如畫點畫線。還要注意的是,使用它的時候,一般都是出現在最頂層的:The view hIErarchy will take care of correctly compositing 。

with the Surface any siblings of the SurfaceView that would normally appear on top of it.使用的SurfaceVIEw的時候,一般情況下還要對其進行創建,銷毀,改變時的情況進行監視,這就要用到SurfaceHolder.Callback。

  1. public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)
  2. {
  3. thread.setSurfaceSize(width, height);
  4. }
  5. public void surfaceCreated(SurfaceHolder holder)
  6. {//啟動工作線程結束
  7. thread.setRunning(true);
  8. thread.start();
  9. }
  10. public void surfaceDestroyed(SurfaceHolder holder)
  11. {
  12. boolean retry = true;
  13. thread.setRunning(false);
  14. while (retry)
  15. {
  16. try
  17. {//等待工作線程結束,主線程才結束
  18. thread.join();
  19. retry = false;
  20. }
  21. catch (InterruptedException e)
  22. {
  23. }
  24. }
  25. }

這個線程由私有類android系統實現,它裡面還有一個自己的消息隊列處理器,用來接收游戲狀態消息,並在屏幕上顯示當前狀態。(而這個功能在Snake中是通過View自己控制其包含的TextView是否顯示來實現的,相比之下,LunarThread的消息處理機制更為高效)。由於有了LunarThread這個負責具體工作的對象,所以LunarVIEw的大部分工作都委托給後者去執行。

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