日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
對于Android工作線程進行全解析

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

灤南網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

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

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

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

 
 
 
  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);//強制重繪制  
  15.                     }  
  16.                 }   
  17.                 finally   
  18.                 {  
  19.                     if (c != null) {  
  20.                         mSurfaceHolder.unlockCanvasAndPost(c);  
  21.                     }  
  22.                 }  
  23.             }  
  24.         } 

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

 
 
 
  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ù)據(jù)做任何修改,依然繪制同一幀畫面,而繼續(xù)則是把mLastTime設(shè)置為當(dāng)前時間+100毫秒的時間點,因為以前暫停時mLastTime就不再更新了,這樣做事為了與當(dāng)前時間同步起來。


分享文章:對于Android工作線程進行全解析
本文鏈接:http://www.5511xx.com/article/dhecddd.html