2011-05-09 33 views
1

嘿, 因此,即時通訊android和我失去了,因爲雖然我的代碼使用AsyncTask它的繁重,我仍然得到一個ANR錯誤,當我運行我的一個類。因此,這裏是我的代碼的相關peices:Android線程

package com.cody.color; 

import android.app.Activity; 
import android.os.Bundle; 


public class Play extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState);  
    System.out.println("about to start threader"); 
    new GuiThreader().execute(); 
    System.out.println("Threader finished"); 
    setContentView(R.layout.colorboard_small); 
} 
} 



package com.cody.color; 

import android.os.AsyncTask; 

public class GuiThreader extends AsyncTask<Void, Void, Void>{ 

@Override 
protected Void doInBackground(Void... params) { 
    // TODO Auto-generated method stub 
    System.out.println("threader moving"); 
    GUIdriver game = new GUIdriver(); 
    game.play(); 
    return null; 
} 

} 
+0

考慮發佈異常堆棧跟蹤。 – ernazm 2011-05-09 13:15:24

+0

什麼是堆棧跟蹤? – Flynn 2011-05-09 13:16:13

+0

谷歌在這種情況下真的很強大http://en.wikipedia.org/wiki/Stack_trace – ernazm 2011-05-09 13:17:38

回答

2

有沒有上面的代碼的任何問題都會導致ANR,所以最有可能是以下中的一個正在發生的事情:

  • 你嘗試從doInBackground
  • 修改用戶界面(UI)的異常是否在您的doInBackground

我存在的如果您在發現錯誤時發佈LogCat輸出或堆棧跟蹤,那麼它將更容易識別。

+0

我想編輯doInBackground中的UI(改變按鈕顏色),所以我應該如何實現它? – Flynn 2011-05-09 13:21:46

+0

重寫'AsyncTask'的'onPostExecute'方法以在'doInBackground'操作結束時更新UI('AsyncTask'將自動調用它並在UI線程上運行它。如果你想在'doInBackground'執行時更新用戶界面,那麼從'doInBackground'調用'publishProgress(Progress progress)',並重寫AsyncTask的'onProgressUpdate(Progress progress)'方法並在那裏進行UI更新。 – 2011-05-09 13:31:26

2

歡迎來到JAVA編程的世界:)當您遇到錯誤時,解決它的最佳工具通常是堆棧跟蹤。您需要了解如何分析堆棧跟蹤並將其包含在您的問題中......

什麼是您要求的堆棧跟蹤?簡單的答案是堆棧跟蹤是一個錯誤信息(儘管它包含的信息比只有更多)。如果發生異常,它會告訴程序員發生了什麼事情,發生了什麼事情,何時發生。如果你想用JAVA編程,你需要熟悉它們。在推進Android開發之前,我建議您閱讀一些JAVA教程。

至於你的代碼,沒有堆棧跟蹤,我不能說更多...除了game.play();看起來像它可能包含對UI的一些更改的事實沒有明顯的錯誤,這是在另一個線程不允許的主要線程(這就是爲什麼AsyncTask有onPostExecute());