2017-07-10 9 views
2

私は、アプリケーション内のすべてのアクティブ/実行中のスレッドを取得しようとしています。私は以下のコードを書きました。私は以下の結果を得ました。 実際には、掲載出力内のスレッドのどれもが私のアプリケーションで実行中のスレッドを取得する方法

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

1を除いて、私のアプリケーションに属していない)数5は何を示しているのでしょうか?

2) 'getAllStackTraces'はシステム全体のすべてのアクティブなスレッドを取得するようですが、私のアプリケーションでのみ実行されているスレッドを取得するにはどうすればよいですか?

コード

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()); 
} 

が出力

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] 

答えて

3

実際には、掲載出力内のスレッドのどれもが私のアプリ

に所属していませんこれらのスレッドはすべてあなたのアプリのプロセスに属します。ほとんどのコードは、フレームワークから来ています。

getAllStackTraces 'の取得と思われるすべてのアクティブなスレッドをシステム全体いいえ、それはあなたのプロセス内のスレッドを取得し

私のアプリケーションでのみ実行されているスレッドを取得するにはどうすればよいですか?

あなたは既にあります。

数字5は何を表しますか?

私はこれがスレッドの優先順位だと考えています。

+0

plus1。自分のコードから始まったスレッドを取得する方法を教えてください。 – user2121

+0

@ user2121:起動時に追跡してください。あなたが 'IntentService'という名前の独自のクラスを作成することを決めた場合を除き、フレームワークはすべてのスレッドを開始しました。 – CommonsWare

+0

私はIntentServiceからスレッドを開始したことをどのように知っていたのですか?ok、IntentServiceはAndroidクラスですが、IntentServiceを除いて、スレッドが特定のクラスから開始したかどうかを知る方法を事前に知っていますか?クラス名の後ろに[]で囲まれた角かっこがあるからでしょうか? – user2121

関連する問題