2014-01-21 20 views
0

我的android應用程序顯示一個畫布上有多個精靈,精靈有自己的線程,橫幅廣告顯示在底部,當廣告被點擊時,它顯示完整的廣告,點擊返回按鈕回到應用程序崩潰的應用程序,找不到日誌貓。android應用程序在畫布上運行多個線程後顯示廣告崩潰

這裏的gameView類代碼創建gameLoopthread

public GameView(Context context) { 
     super(context); 
     tmpcontext = context; 
     gameLoopThread = new GameLoopThread(this); 
     bmpback = BitmapFactory.decodeResource(getResources(), R.drawable.e_castle_1); 


     getHolder().addCallback(new SurfaceHolder.Callback() { 

       @Override 
       public void surfaceDestroyed(SurfaceHolder holder) { 
         boolean retry = true; 
         gameLoopThread.setRunning(false); 
         while (retry) { 
           try { 
            gameLoopThread.join(); 
            retry = false; 
           } catch (InterruptedException e) {} 
         } 
       } 

       @Override 
       public void surfaceCreated(SurfaceHolder holder) { 
         createSprites(); 
         gameLoopThread.setRunning(true); 
         if(gameviewcreated == false) gameLoopThread.start(); 

         if(gameviewcreated == true) 
         try { 
          gameLoopThread.join(); 
         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         gameviewcreated = true; 

       } 

origionally我只gameLoopThread.start()在surfaceCreated方法,因此它試圖在用戶點擊它顯示的廣告後,再次啓動線程,從而吹起來,現在我已經添加檢查,以查看已創建的gameviewcreated。它沒有崩潰,但沒有帶來原始線程,所以它不顯示畫布或精靈,思想加入應該這樣做。

+0

必須有一些logcat。你需要發佈你有什麼。 – William

+0

添加代碼,請看看它。 – user2716528

回答

0

您似乎對如何在Java中使用線程感到困惑。

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()

加入將阻塞,直到線程死亡。

對您的代碼進行評論非常困難,因爲在GameView的構建時間和方式方面並不明顯,也沒有說明您使用GameLoopThread做了什麼。我懷疑你想要從GameView控制線程生命週期,而不是從SurfaceHolder回調中控制線程生命週期。我也建議你使用一個普通的Thread對象,並將一個Runnable傳遞給它,這是你的邏輯。兩者的分離將爲您的編碼風格創造奇蹟。

+0

同意你,新來使用線程。我曾嘗試過沒有加入的代碼,但沒有成功。我的屏幕在畫布上顯示精靈並且用戶點擊橫幅廣告,當他點擊後,程序應該自動恢復並且應該由系統處理,我不應該做任何事情。 – user2716528

相關問題