2013-11-03 55 views
0

海蘭 我開發一個PROGRAMM一些線程,有時我得到這個錯誤信息:Android的線程#1

11-03 18:58:06.047: I/dalvikvm(3587): threadid=15: stack overflow on call to  Ljava/lang/ref/FinalizerReference;.<init>:VLL 
11-03 18:58:06.047: I/dalvikvm(3587): method requires 12+20+12=44 bytes, fp is 0x591ad314 (20 left) 
11-03 18:58:06.047: I/dalvikvm(3587): expanding stack end (0x591ad300 to 0x591ad000) 
11-03 18:58:06.047: I/dalvikvm(3587): Shrank stack (to 0x591ad300, curFrame is 0x591ad328) 

我用這個代碼outputing我的所有活動的線程:

Set<Thread> threadSet = Thread.getAllStackTraces().keySet(); 
Thread[] threadArray = threadSet.toArray(new Thread[threadSet.size()]); 
for(int i=0;i<threadArray.length;i++){ 
    Log.e("Threadtest", threadArray[i].getName()+"|"+ threadArray[i].getClass()+"|"+ threadArray[i].getId()); 
} 

這是輸出:

11-03 18:58:02.847: E/Threadtest(3587): Signal Catcher|class java.lang.Thread|205 
11-03 18:58:02.847: E/Threadtest(3587): Compiler|class java.lang.Thread|207 
11-03 18:58:02.847: E/Threadtest(3587): FinalizerWatchdogDaemon|class java.lang.Thread|210 
11-03 18:58:02.847: E/Threadtest(3587): pool-1-thread-1|class java.lang.Thread|217 
11-03 18:58:02.847: E/Threadtest(3587): Binder_1|class java.lang.Thread|211 
11-03 18:58:02.847: E/Threadtest(3587): ReferenceQueueDaemon|class java.lang.Thread|208 
11-03 18:58:02.847: E/Threadtest(3587): Thread-224|class java.lang.Thread|224 
11-03 18:58:02.847: E/Threadtest(3587): JDWP|class java.lang.Thread|206 
11-03 18:58:02.847: E/Threadtest(3587): main|class java.lang.Thread|1 
11-03 18:58:02.847: E/Threadtest(3587): Thread-214|class com.example.evosoft.ComUSB.Send.GCodeSender|214 
11-03 18:58:02.847: E/Threadtest(3587): Thread-213|class com.example.evosoft.PrinterInfoSender|213 
11-03 18:58:02.847: E/Threadtest(3587): Thread-215|class com.example.evosoft.ComUSB.UsbConnectionChecker|215 
11-03 18:58:02.847: E/Threadtest(3587): GC|class java.lang.Thread|204 
11-03 18:58:02.847: E/Threadtest(3587): Binder_2|class java.lang.Thread|212 
11-03 18:58:02.847: E/Threadtest(3587): FinalizerDaemon|class java.lang.Thread|209 

這將幫助我很多,當我知道在哪個線程中錯誤發生。

問候 馬庫斯

+1

我會recommomend你使用線程池,而不是線程集:http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html – for3st

+0

更多的代碼會有所幫助。此外,由於錯誤是棧溢出,你應該檢查所有你遞歸調用方法的地方。 –

+0

我想我已經叫什麼遞歸。 我需要知道在哪個線程發生更多的代碼或找到錯誤:( –

回答

0

你看了關於Threads in Android從未從UI線程之外GUI交互的基本知識?

+0

感謝您的回覆 我呼籲從一個非gui線程的USB權限,是不是這樣好嗎? –

+0

應該沒問題。 – Simulant