有人能解释一下为什么在新线程中写入新的Runnable吗?我第一次在android开发者那里看到这个,请看下面链接中的代码。另外,您能告诉我们为什么需要在单独的线程中实现通知吗?
http://developer.android.com/training/notify-user/display-progress.html
我过去常常通过新的Thread或Runnable创建线程,但不是一起创建,所以有点困惑。。
我们可以通过两种方式创建线程
通过扩展Thread类和实现可运行接口
如果我们像下面的一样通过扩展Thread类来创建一个类
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()
中定义线程的作业。但是,如果您像下面这样通过实现Runnable(I)
来创建Thread。
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()
}
}
您不能用ThreadDemo
实例直接调用start()
,因为Runnable(I)
只包含run()
方法,所以您必须在创建Thread
时将ThreadDemo
实例传递给Thread
实例—它初始化了target Runnable instance
并调用了Runnable
run()
方法,而不是Thread
类run()
方法。
new Thread(
new Runnable() {
......
.....
}
}
).start();
类似于
ThreadDemo d = new ThreadDemo(); //d.start() is not possible
Thread t = new Thread(d);//where d is target runnable
t.start()
这只是一个懒惰的例子,无论是谁设置了该页面,都会编写它。可能是因为它需要浓缩和简短。
它所显示的只是你如何在通知栏中显示进度。它试图告诉你的是,在漫长的后台操作过程中,你可以在通知栏中显示进度。它是线程安全的,不必是主UI线程,所以可以随意在任何需要的地方显示进度。通常在递增计数器的操作过程中不会使用Thread.sleep
。实际上,为了显示进度,您必须决定在操作过程中进度值代表什么。
Thread
是表示执行线程的java对象。Runnable
是对象的接口,这些对象表示要由Thread
执行的某些代码。两个概念,两种类型(执行->Thread
,代码->Runnable
)。
为了简单起见(?)Thread
s也是Runnable
s,因此在简单的情况下,您只需将Thread
子类化并覆盖其run
方法(run
方法的默认实现不起任何作用)。如果不将Runnable
赋予Thread
,则它将自己用作执行的Runnable
。