2016-04-04 7 views
0

誰かがなぜ新しいスレッドで新しいRunnableを書くのか説明していただけますか?私はアンドロイドの開発者にこれを見て拳の時間、以下のリンクのコードをご覧ください。 また、別のスレッドで通知を実装する必要がある理由を教えてください。新しいスレッドで新しいRunnableを書くのはなぜですか?

http://developer.android.com/training/notify-user/display-progress.html

私は新しいスレッドまたはRunnableをしてスレッドを作成するために使用さではなく、一緒に、そう少し混乱しました。..

+0

_に似て

new Thread( new Runnable() { ...... ..... } } ).start(); 

は "1は新しいスレッドでRunnableを新たに書き込みを行う理由を誰も説明していただけますか?" _ https://docs.oracle.com/javase/tutorial/を参照してください。 essential/concurrency/runthread.html – Michael

答えて

1

これは、誰でもそのページを設定することは書いたことだけで怠惰な例です。それは凝縮され、短くする必要があったためでしょう。

通知バーに進捗状況を表示する方法がすべて表示されます。あなたに伝えようとしていることは、長時間のバックグラウンド操作中に通知バーに進行状況を表示できることです。スレッドセーフなので、メインのUIスレッドである必要はありませんので、必要に応じて進捗状況を自由に表示してください。通常、カウンターをインクリメントしている間は、操作中はThread.sleepを使用しません。実際には、進行状況を示すために、操作の進行中に進捗値が何を表しているかを判断する必要があります。

+0

私はこの質問を誤解していると思いますか?なぜあなたはスレッドの進捗状況を表示するのか、 'run()'をオーバーライドするのではなくRunnableを使う理由を知りたいですか? – DeeV

+0

したがって、UIスレッドをブロックしないように、基本的に別のスレッドで通知を実装しますか? – Rachael

+0

@Rachael UIスレッドをブロックすることはありません。それはあなたがUIスレッドでそれを実行する必要がないことを示している。 UIスレッドで実行されないバックグラウンド操作の進捗状況が(通常は)表示されるため、これは重要です。論理的に意味のあるスレッドで通知を表示することができます。 – DeeV

1

Threadは、実行スレッドを表すJavaオブジェクトです。 Runnableは、Threadによって実行されることを意図したコードを表すオブジェクトのためのインターフェイスです。 2つの概念、2つのタイプ(実行 - >Thread、コード - >Runnable)。簡単な例で、あなただけのThreadをサブクラス化し、そのrunメソッドをオーバーライドする必要がなるように簡単にするために

(?)Thread sが(runメソッドのデフォルト実装は何もしません)、またRunnable秒です。 RunnableThreadを指定しないと、Runnableとして実行されます。

我々は次のようにThreadクラスを拡張することにより、クラスを作成する場合、我々はThreadクラスを拡張することにより、および、Runnableインタフェース

を実装することで、二つの方法

内のスレッドを作成することができます

1

以下

class ThreadDemo extends Thread{ 
public void run(){ 
//job of a thread 
} 
public static void main (String[] args){ 
ThreadDemo d = new ThreadDemo(); 
d.start(); 
} 
} 

start()jvmを直接呼び出すことで、run()メソッドを呼び出すことができます。あなたのクラスでそれをオーバーライドすることによってrun()のスレッドのefineの仕事。 しかし、以下のようにRunnable(I)を実装してスレッドを作成するとします。

class ThreadDemo implements Runnable{ 
public void run(){ 
//job of Thread 
} 
public static void main(String[] args){ 
ThreadDemo d = new ThreadDemo(); //d.start() is not possible 
Thread t = new Thread(d);//where d is target runnable 
t.start() 
} 
} 

Runnable(I)だけrun()メソッドが含まれているため、あなたがThread作成時にThreadインスタンスにごThreadDemoインスタンスを渡す必要がありますので、それはあなたのtarget Runnable instanceを初期化し、ThreadないRunnablerun()メソッドを呼び出して、ThreadDemoインスタンスに直接start()を呼び出すカントクラスrun()メソッド。

ThreadDemo d = new ThreadDemo(); //d.start() is not possible 
    Thread t = new Thread(d);//where d is target runnable 
    t.start() 
+0

完璧な説明!どうもありがとうございました。 – Rachael

+0

@Rachaelありがとう –

関連する問題