2017-07-10 3 views
2

Ich versuche, alle aktiven/laufenden Threads in der App zu bekommen. Ich habe den unten angegebenen Code geschrieben, und ich habe die unten angegebenen Ergebnisse erhalten. Eigentlich keiner der Threads im tragenen Ausgabe gehört zu meinen App außerWie bekomme ich die laufenden Threads in meiner App nur

07-10 15:36:48.621 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[IntentService[GcmIntentService],5,main] 

1) Was bedeutet Nummer 5 gibt?

2) es scheint, dass 'getAllStackTraces' alle aktiven Threads systemweit abruft, aber wie bekomme ich die Threads, die nur in meiner App laufen?

Code:

Set<Thread> threadSet = Thread.getAllStackTraces().keySet(); 
Thread[] threadArray = threadSet.toArray(new Thread[threadSet.size()]); 
Thread thread = null; 
for (int i = 0; i < threadArray.length; i++) { 
    thread = threadArray[i]; 
    Log.d(TAG, "thread.toString():" + thread.toString()); 
} 

Ausgang:

07-10 15:36:48.621 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[IntentService[GcmIntentService],5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[FinalizerWatchdogDaemon,5,system] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[Timer-0,5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[RenderThread,5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[ReferenceQueueDaemon,5,system] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[FinalizerDaemon,5,system] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[Binder_3,5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[main,5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[Signal Catcher,5,system] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[Binder_1,5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[Binder_2,5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[GCDaemon,5,system] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[pool-1-thread-1,5,main] 
07-10 15:36:48.622 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[JDWP,5,system] 
07-10 15:36:48.623 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[HeapTrimmerDaemon,5,system] 
07-10 15:36:48.623 19333-19624/eu.men.m2sapp D/GcmIntentService: thread.toString():Thread[Thread-52709,5,main] 

Antwort

3

Eigentlich keiner der Threads im tragenen Ausgabe gehören zu meiner App

Alle diese Threads gehören zum Prozess Ihrer App. Die meisten kommen aus dem Framework, anstatt aus Ihrem Code.

es scheint, dass 'getAllStackTraces'

Keine alle aktiven Threads systemweite abruft, sie die Fäden in Ihrem Prozess abruft.

Wie bekomme ich die Threads, die nur in meiner App ausgeführt werden?

Sie sind bereits.

Was bedeutet Nummer 5?

Ich glaube, das ist die Thread-Priorität.

+0

plus1. Würdest du mir bitte sagen, wie man nur die Threads bekommt, die mit meinem Code begonnen haben? – user2121

+0

@ user2121: Behalten Sie sie im Auge, wenn Sie sie starten. Soweit ich sehen kann, hat das Framework alle Ihre Threads gestartet, es sei denn, Sie haben sich entschieden, eine eigene Klasse namens "IntentService" zu erstellen. – CommonsWare

+0

würdest du mir bitte sagen woher weißt du, dass ich meinen Thread von IntentService gestartet habe? Ok, wir wissen im Voraus, dass IntentService Android-Klasse ist, aber abgesehen von IntentService wie man wissen sollte, ob ein Thread von einer bestimmten Klasse gestartet wurde? vielleicht, weil es nach dem Klassennamen '[]' eckige Klammern gibt? – user2121

Verwandte Themen