成人免费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技術棧公眾號

主站蜘蛛池模板: 丝袜一区二区三区 | 久精品久久 | 成人性视频在线播放 | 欧美理论片在线 | 午夜小视频在线观看 | 青娱乐一区二区 | 精品日韩在线观看 | 亚洲 欧美 另类 综合 偷拍 | 色视频免费 | 91精品国产综合久久久久蜜臀 | 国产一级毛片精品完整视频版 | 二区视频| 国产高清精品一区二区三区 | 成人精品国产一区二区4080 | 九一在线 | 色综合99 | 91亚洲国产 | 国产精品久久午夜夜伦鲁鲁 | 伊人狼人影院 | 国产精品毛片无码 | 丝袜美腿一区二区三区动态图 | 国产高清视频一区二区 | 国产精品成人在线播放 | 国产精品一区二区三区久久 | 精品91久久| 波多野结衣在线观看一区二区三区 | 在线播放91| 亚州精品天堂中文字幕 | 久久九九网站 | 国产成人99久久亚洲综合精品 | 久久av一区 | 精品久久久久久久久久 | 天天玩天天操天天干 | 久久成人精品 | 国产精品美女久久久 | 丁香一区二区 | 91精品国产乱码麻豆白嫩 | 国产精品一区二区三区四区 | 极品在线| 久久久久久免费毛片精品 | 日韩激情免费 |