小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
Android中的同步与异步
最近做了很久关于Android蓝牙的操作,Android蓝牙操作起来算比较麻烦,主要是因为太多的接口回调,加上业务上尽量实现多连接,这就让整个代码总感觉不太顺畅。所以当时就想能不能构造同步的方法,让逻辑变得简单。
那么在Android中怎么实现这些同步和异步方法呢?
Android中的同步方式
-
java中的同步方法和同步方法块 (synchronized)
-
Lock类
-
Object的wait && notify方法
-
Semaphore(信号量, 可以用来控制同时访问特定资源的线程数量)
-
CountDownLatch (使一个线程等待其他线程各自执行完毕后再执行)
-
CyclicBarrier (它的作用就是会让所有线程都等待完成后才会继续下一步行动。)
Android中的异步方法
-
Thread / Runnable 线程
-
AsyncTask Android 已封装好的轻量级异步类。属于抽象类,即使用时需实现子类。
-
Handler
-
interface 接口回调
-
Broadcast广播消息
-
EventBus 事件分发(第三方框架)
应用场景
我需要下载100首音乐,目前有一个封装好的下载类,下载工具类中使用了线程,下载单首音乐后,会给出成功或者失败的回调结果。
现在要下载100首音乐,并显示出100首音乐的进度。我是这样思考的,伪代码:
for(int i =0; i<100; i++){
boolean result = download(下载)
if(result){
提示:下载成功 i/100;
}
}
但是download
方法是个线程,如何用这种方式去接收返回值呢。
答:异步方法以同步方式进行。