Android多线程编程
熟悉Java的你,对多线程编程一定不会陌生吧。当我们需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们的请求,如果不将这类操作放在子线程里去运行,就会导致主线程被阻塞住,从而影响用户对软件的正常使用。那么就让我们从线程的基本用法开始学习吧。
线程的基本用法
继承Thread类重写run()方法
Android多线程编程其实并不比Java多线程编程特殊,基本都是使用相同的语法。比如说,定义一个线程只需要新建一个类继承自Thread,然后重写父类的run()方法,并在里面编写耗时逻辑即可,如下所示:
class MyThread extends Thread {
@Override
public void run() {
//处理具体的逻辑
}
}
那么该如何启动这个线程呢?其实也很简单,只需要new出MyThread的实例,然后调用它的start()方法,这样run()方法中的代码就会在子线程当中运行了,如下所示:
new MyThread().start();
实现Runnable接口重写run()方法
当然,使用继承的方式耦合性有点高,更多的时候我们都会选择使用实现Runnable接口的方式来定义一个线程,如下所示:
class MyThread implements Runnable {
@Override
public void run() {
//处理具体的逻辑
}
}
如果使用了这种写法,启动线程的方法也需要进行相应的改变,如下所示:
MyThread myThread = new MyThread();
new Thread(myThread).start();
可以看到,Thread的构造函数接收一个Runnable参数,而我们new出的MyThread正是一个实现了Runnable接口的对象,所以可以直接将它传入到Thread的构造函数里。接着调用Thread的start()方法,run()方法中的代码就会在子线程当中运行了。
使用匿名类
当然,如果你不想专门再定义一个类去实现Runnable接口,也可以使用匿名类的方式,这种写法更为常见,如下所示:
new Thread(new Runnable() {
@Override
public void run() {
//处理具体的逻辑
}
}).start();
以上几种线程的使用方式相信你都不会感到陌生,因为在Java中创建和启动线程也是使用同样的方式。了解了线程的基本用法后,下面我们来看一下Android多线程编程与Java多线程编程不同的地方。
如果对你有帮助,就一键三连呗(点赞+收藏+关注),我会持续更新更多干货~~