偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

概括Android系統(tǒng)存在的種種BUG

移動(dòng)開發(fā) Android
Android系統(tǒng)里有這樣兩個(gè)概念,向上類型轉(zhuǎn)換,向下類型轉(zhuǎn)換,分別描述的是子類向基類和基類向子類的強(qiáng)制類型轉(zhuǎn)換。

Android系統(tǒng)還是比較常用的,于是我研究了一下Android系統(tǒng),在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。經(jīng)過長(zhǎng)時(shí)間學(xué)習(xí)Android系統(tǒng)的原理,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

就界面Layout來(lái)說,這個(gè)程序其實(shí)和Snake沒有什么不同,同樣是采用了FrameLayout,而且游戲的主界面由一個(gè)自定義的View來(lái)實(shí)現(xiàn),這里是LunarView。讀過上一篇文章的朋友也許會(huì)發(fā)現(xiàn),Snake的架構(gòu)是“定時(shí)器+系統(tǒng)調(diào)用onDraw”來(lái)實(shí)現(xiàn)的。

這里有一個(gè)***的缺陷就是onDraw是由Android系統(tǒng)來(lái)調(diào)用的。我們只能依賴它,卻無(wú)法自行控制。這就好比一個(gè)黑盒,當(dāng)然,總是能把我們要的東西給做出來(lái),可卻無(wú)法控制其做事的細(xì)節(jié)。

這對(duì)于游戲這樣高效率的東西可是不利的,因此***的解決之道當(dāng)然是把繪制這部分工作自己”承包“過來(lái),告別吃大鍋飯的,進(jìn)入”聯(lián)產(chǎn)承包制”時(shí)代。此外,由于游戲的本質(zhì)就是連續(xù)兩幀圖片之間發(fā)生些許差異,那么要不斷催生這種差異的發(fā)生,只要有某種連續(xù)不斷發(fā)生的事件在進(jìn)行就可以。

例如Snake中使用的定時(shí)器,就是在不斷地產(chǎn)生這種“差異源”,與此類似,一個(gè)線程也是不斷在運(yùn)行中,通過它也是可以不斷產(chǎn)生這種“差異源”的。如果說Snake中使用的Layout加自定義View是一把小型武器的話,那在SurfaceView對(duì)于android中游戲的開發(fā)來(lái)說就算是重型武器了。

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

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

要畫在surface上。每個(gè)surface創(chuàng)建一個(gè)Canvas對(duì)象(但屬性時(shí)常改變),用來(lái)管理view在surface上的繪圖操作,如畫點(diǎn)畫線。還要注意的是,使用它的時(shí)候,一般都是出現(xiàn)在最頂層的: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的時(shí)候,一般情況下還要對(duì)其進(jìn)行創(chuàng)建,銷毀,改變時(shí)的情況進(jìn)行監(jiān)視,這就要用到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. {//啟動(dòng)工作線程結(jié)束  
  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.             {//等待工作線程結(jié)束,主線程才結(jié)束  
  18.                 thread.join();  
  19.                 retry = false;  
  20.             }   
  21.             catch (InterruptedException e)   
  22.             {  
  23.             }  
  24.         }  
  25.     } 

這個(gè)線程由私有類Android系統(tǒng)實(shí)現(xiàn),它里面還有一個(gè)自己的消息隊(duì)列處理器,用來(lái)接收游戲狀態(tài)消息,并在屏幕上顯示當(dāng)前狀態(tài)。(而這個(gè)功能在Snake中是通過View自己控制其包含的TextView是否顯示來(lái)實(shí)現(xiàn)的,相比之下,LunarThread的消息處理機(jī)制更為高效)。由于有了LunarThread這個(gè)負(fù)責(zé)具體工作的對(duì)象,所以LunarView的大部分工作都委托給后者去執(zhí)行。

【編輯推薦】

  1. Android應(yīng)用程序組建原理深入剖析 
  2. Android SMS短信服務(wù)相關(guān)概念簡(jiǎn)述 
  3. PythonAndroid數(shù)據(jù)庫(kù)相關(guān)代碼解讀 
  4. PythonAndroid安裝卸載程序具體操作方法解析 
  5. Android應(yīng)用程序的四個(gè)關(guān)鍵點(diǎn) 
責(zé)任編輯:chenqingxiang 來(lái)源: NET130
相關(guān)推薦

2010-03-03 16:14:56

Android系統(tǒng)市場(chǎng)

2010-03-05 15:43:46

Android SDK

2010-02-05 18:09:12

Android

2009-10-15 12:54:09

綜合布線系統(tǒng)

2009-10-14 17:56:43

光纖布線系統(tǒng)

2010-03-03 14:06:38

2010-02-06 09:32:18

Android Ser

2009-10-28 16:20:01

2009-11-27 16:25:54

2010-07-20 16:14:42

2020-04-07 15:28:22

蘋果MacOS漏洞

2009-12-29 13:12:03

Ubuntu Linu

2009-10-16 12:55:27

結(jié)構(gòu)化布線系統(tǒng)

2011-05-11 11:08:57

2017-12-18 11:16:31

iOS蘋果Bug

2021-02-27 09:25:37

漏洞網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2009-12-29 13:30:23

Ubuntu操作系統(tǒng)

2021-09-24 16:16:27

iOS蘋果系統(tǒng)

2009-10-16 11:20:35

光纜布線系統(tǒng)

2009-12-25 11:40:29

Linux root
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)