成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對于Android工作線程進行全解析

移動開發 Android
Android工作線程工作原理為:主要是為了節約CPU時間,發揮利用,根據具體情況而定. 線程的運行中需要使用計算機的內存資源和CPU。

Android工作線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,這些內容都是一些門戶網站和技術論壇找到的,中間可能有不少錯誤是我沒有挑出的,歡迎大家指正。

由于SurfaceHolder是一個共享資源,因此在對其操作時都應該實行“互斥操作“,即需要使用synchronized進行”封鎖“機制。再來討論下為什么要使用消息機制來更新界面的文字信息呢?其實原因是這樣的。

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

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

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

下面就是LunaThread這個Android工作線程的執行函數了,它一直不斷在重復做一件事情:鎖定待繪制區域(這里是整個屏幕),若游戲還在進行狀態,則更新底層的數據,然后直接強制界面重新繪制。

  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的暫停其實并沒有不再強制重繪制,而是沒有對底層的數據做任何修改,依然繪制同一幀畫面,而繼續則是把mLastTime設置為當前時間+100毫秒的時間點,因為以前暫停時mLastTime就不再更新了,這樣做事為了與當前時間同步起來。

責任編輯:chenqingxiang 來源: 計世網
相關推薦

2010-02-06 10:42:41

Android Ser生命周期

2010-02-23 16:46:27

Python設計語言

2010-02-05 14:34:11

Android操作系統

2010-02-06 10:14:36

Android Act

2010-03-03 14:51:02

Android手機

2010-02-02 13:32:32

Python繼承

2009-12-07 09:58:35

WCF性能

2010-03-04 16:38:37

Android開發技巧

2010-02-07 10:21:27

Android應用程序

2010-02-06 16:26:30

Android開源

2010-02-22 10:18:29

Python代碼

2010-03-01 14:28:46

Python進程

2010-02-04 14:16:45

Android平臺

2010-03-04 17:50:42

Android操作系統

2016-12-02 19:00:13

Android FraAndroid

2009-12-01 17:55:11

VS2003配置

2010-03-01 13:19:21

Python線程內容

2010-02-06 17:17:17

Android手機

2010-02-05 14:54:56

Android UI

2010-02-06 09:38:42

Android調用服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看av网站永久 | 爱爱视频网 | 国产91在线观看 | 成人免费片 | 国产免费一区二区三区最新6 | 欧美福利久久 | 久久久久亚洲精品国产 | 国产精品一区二区av | 久久一区二| 成人精品| 一级毛毛片 | 久久久久亚洲 | 亚洲在线电影 | 成人毛片一区二区三区 | 欧美日韩综合 | 日本久久网 | 久久久精品网站 | 亚洲精品美女视频 | 免费同性女女aaa免费网站 | 国产在线精品一区二区三区 | 国产97久久 | 久久国产精品视频 | 天堂av影院| 一区二区三区免费 | 日韩精品av一区二区三区 | 日韩在线欧美 | 日韩一区二区三区在线观看 | 91中文在线观看 | 精品欧美一区二区精品久久久 | 成年人在线观看视频 | 一区二区三区在线观看视频 | 自拍视频在线观看 | 日韩一区二区三区在线观看 | 日本一二三区在线观看 | 国色天香成人网 | 国产日韩久久 | 欧美成人影院在线 | 国产激情一区二区三区 | 日本一二区视频 | 欧美国产精品一区二区三区 | 超碰av人人 |