Android中的同步与异步

712 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Android中的同步与异步

最近做了很久关于Android蓝牙的操作,Android蓝牙操作起来算比较麻烦,主要是因为太多的接口回调,加上业务上尽量实现多连接,这就让整个代码总感觉不太顺畅。所以当时就想能不能构造同步的方法,让逻辑变得简单。

那么在Android中怎么实现这些同步和异步方法呢?

Android中的同步方式

  1. java中的同步方法和同步方法块 (synchronized)

  2. Lock类

  3. Object的wait && notify方法

  4. Semaphore(信号量, 可以用来控制同时访问特定资源的线程数量)

  5. CountDownLatch (使一个线程等待其他线程各自执行完毕后再执行)

  6. CyclicBarrier (它的作用就是会让所有线程都等待完成后才会继续下一步行动。)

Android中的异步方法

  1. Thread / Runnable 线程

  2. AsyncTask Android 已封装好的轻量级异步类。属于抽象类,即使用时需实现子类。

  3. Handler

  4. interface 接口回调

  5. Broadcast广播消息

  6. EventBus 事件分发(第三方框架)

应用场景

我需要下载100首音乐,目前有一个封装好的下载类,下载工具类中使用了线程,下载单首音乐后,会给出成功或者失败的回调结果。

现在要下载100首音乐,并显示出100首音乐的进度。我是这样思考的,伪代码:


for(int i =0; i<100; i++){

boolean result = download(下载)

if(result){

提示:下载成功 i/100;

}

}

但是download方法是个线程,如何用这种方式去接收返回值呢。

答:异步方法以同步方式进行。