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

對(duì)于Android工作線程進(jìn)行全解析

移動(dòng)開(kāi)發(fā) Android
Android工作線程工作原理為:主要是為了節(jié)約CPU時(shí)間,發(fā)揮利用,根據(jù)具體情況而定. 線程的運(yùn)行中需要使用計(jì)算機(jī)的內(nèi)存資源和CPU。

Android工作線程是程序中一個(gè)單一的順序控制流程.在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,這些內(nèi)容都是一些門戶網(wǎng)站和技術(shù)論壇找到的,中間可能有不少錯(cuò)誤是我沒(méi)有挑出的,歡迎大家指正。

由于SurfaceHolder是一個(gè)共享資源,因此在對(duì)其操作時(shí)都應(yīng)該實(shí)行“互斥操作“,即需要使用synchronized進(jìn)行”封鎖“機(jī)制。再來(lái)討論下為什么要使用消息機(jī)制來(lái)更新界面的文字信息呢?其實(shí)原因是這樣的。

渲染文字的工作實(shí)際上是主線程(也就是LunarView類)的父類View的工作。而并不屬于Android工作線程LunarThread,因此在Android工作線程中式無(wú)法控制的。所以我們改為向主線程發(fā)送一個(gè)Message來(lái)代替。

讓主線程通過(guò)Handler對(duì)接收到的消息進(jìn)行處理,從而更新界面文字信息。再回顧上一篇SnakeView里的文字信息更新,由于是SnakeView自己(就這一個(gè)線程)對(duì)其包含的TextView做控制,當(dāng)然沒(méi)有這樣的問(wèn)題了。

  1. public void run()   
  2.         {  
  3.             while (mRun)   
  4.             {  
  5.                 Canvas c = null;  
  6.                 try   
  7.                 {  
  8.                     //鎖定待繪制區(qū)域  
  9.                     c = mSurfaceHolder.lockCanvas(null);  
  10.                     synchronized (mSurfaceHolder)  
  11.                     {  
  12.                         if (mMode == STATE_RUNNING)   
  13.                             updatePhysics();//更新底層數(shù)據(jù),判斷游戲狀態(tài)  
  14.                         doDraw(c);//強(qiáng)制重繪制  
  15.                     }  
  16.                 }   
  17.                 finally   
  18.                 {  
  19.                     if (c != null) {  
  20.                         mSurfaceHolder.unlockCanvasAndPost(c);  
  21.                     }  
  22.                 }  
  23.             }  
  24.         } 

下面就是LunaThread這個(gè)Android工作線程的執(zhí)行函數(shù)了,它一直不斷在重復(fù)做一件事情:鎖定待繪制區(qū)域(這里是整個(gè)屏幕),若游戲還在進(jìn)行狀態(tài),則更新底層的數(shù)據(jù),然后直接強(qiáng)制界面重新繪制。

  1. canvas.save();  
  2.             canvas.rotate((float) mHeading, (float) mX, mCanvasHeight  
  3.                     - (float) mY);  
  4.             if (mMode == STATE_LOSE) {  
  5.                 mCrashedImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop  
  6.                         + mLanderHeight);  
  7.                 mCrashedImage.draw(canvas);  
  8.             } else if (mEngineFiring) {  
  9.                 mFiringImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop  
  10.                         + mLanderHeight);  
  11.                 mFiringImage.draw(canvas);  
  12.             } else {  
  13.                 mLanderImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop  
  14.                         + mLanderHeight);  
  15.                 mLanderImage.draw(canvas);  
  16.             }  
  17.             canvas.restore(); 

LunarLancher的暫停其實(shí)并沒(méi)有不再?gòu)?qiáng)制重繪制,而是沒(méi)有對(duì)底層的數(shù)據(jù)做任何修改,依然繪制同一幀畫(huà)面,而繼續(xù)則是把mLastTime設(shè)置為當(dāng)前時(shí)間+100毫秒的時(shí)間點(diǎn),因?yàn)橐郧皶和r(shí)mLastTime就不再更新了,這樣做事為了與當(dāng)前時(shí)間同步起來(lái)。

責(zé)任編輯:chenqingxiang 來(lái)源: 計(jì)世網(wǎng)
相關(guān)推薦

2010-02-06 10:42:41

Android Ser生命周期

2010-02-23 16:46:27

Python設(shè)計(jì)語(yǔ)言

2010-02-05 14:34:11

Android操作系統(tǒng)

2010-02-06 10:14:36

Android Act

2010-03-03 14:51:02

Android手機(jī)

2009-12-07 09:58:35

WCF性能

2010-02-02 13:32:32

Python繼承

2010-03-04 16:38:37

Android開(kāi)發(fā)技巧

2010-02-07 10:21:27

Android應(yīng)用程序

2010-02-06 16:26:30

Android開(kāi)源

2010-02-04 14:16:45

Android平臺(tái)

2010-02-22 10:18:29

Python代碼

2010-03-01 14:28:46

Python進(jìn)程

2010-03-04 17:50:42

Android操作系統(tǒng)

2009-12-01 17:55:11

VS2003配置

2016-12-02 19:00:13

Android FraAndroid

2010-03-01 13:19:21

Python線程內(nèi)容

2010-02-06 17:17:17

Android手機(jī)

2010-02-05 14:54:56

Android UI

2010-02-23 15:29:43

Python 編輯器
點(diǎn)贊
收藏

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