Android中线程的实现方式,我大概总结了以下五种:
1、extends Thread, 重写run()方法
class MyThread extends Thread{
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
super.run();
}
}
//启动线程
new MyThread().start();
这种还可以以内部类的方式直接启动线程
new Thread(){
@Override
public void run() {
//TODO
super.run();
}
}.start();
2、implements Runnable,重写run()方法
class ThreadRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//启动线程
new Thread(new ThreadRunnable()).start();
同样也有内部类实现方式
new Thread(new Runnable() {
@Override
public void run() {
//TODO
}
}).start();
3.实现一个Callable,重写方法call() ,这种方式和实现Runnable方式很相似,他们的不同之处在于,callable会抛出异常,返回线程执行的结果
//实现一个callable接口
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
//TODO
return null;
}
}
//基于callable实现创建一个FutureTask,然后通过Thread启动这个Task
FutureTask<String> task = new FutureTask<>(new MyCallable());
new Thread(task).start();
4、通过一个AsyncTask来启动一个线程
class MyAsynTask extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... strings) {
//TODO 耗时的工作
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//回到主线程中处理
}
}
//在UI线程中执行:
new MyAsyncTask().execute("task1");
同样内部类实现方式
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
//TODO 耗时的工作
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//回到UI主线程中处理
}
}.execute("task1");
5、 通过HandlerThread启动线程,是继承的Thread,其实就是一个Thread, 还有IntentService,也可