最新版的点我达骑手APP对新订单消息提醒、订单信息被修改、新的可抢订单等声音及制动提醒做出了规范和优化,加入了消息提醒(包括声音及振动提醒)优先级机制,即在优先级较高的声音在播放过程中有优先级较低的声音插入播放队列,则忽略优先级较低的声音不进行播放;优先级较低的声音在播放过程中有优先级较高的声音插入播放队列,则在优先级较低的声音播放结束后再对插入的优先级较高的声音进行播放。本文从如何更安全高效的执行耗时任务(音频播放等),如何有序执行任务队列中的任务等方面进行介绍。
1.怎么播放音频文件?
这里说的"怎么播放音频文件"并不是指用什么API区播放,而是在Android客户端APP在应用内存被限制的情况下(具体APP被分配的内存与Android系统版本、手机厂商对Android系统的个性化定制、手机硬件配置等有关)如何保证在播放音频文件的过程中尽可能不损耗应用的性能从而产生ANR、Crash等重大性能问题。
首先贴一下后文中介绍的三种播放音频文件方式公用的工具类代码,不喜勿喷。
package audio.rider.dwd.com.audioplayer.util;
import android.content.Context;
import android.media.MediaPlayer;
import android.util.Log;
import audio.rider.dwd.com.audioplayer.R;
/**
* Created by WangChunelei on 16/10/28.
* 音频播放工具类
*/
public class AudioManager {
private static final String TAG = "AudioManager";
private static AudioManager singleton;
/*正在播放的音频优先级*/
private int audioPriority;
/*回调对象*/
private OnAudioChangeListener onAudioChangeListener;
/*当前音频播放的次数*/
private int currentRepeatIndex = 0;
/*声音播放器对象*/
private MediaPlayer mediaPlayer = null;
/*声音的播放次数*/
int audioRepeatCount = 0;
private AudioManager() {
}
public static AudioManager getInstance() {
if (singleton == null) {
synchronized (AudioManager.class) {
if (singleton == null) {
singleton = new AudioManager();