使用IntentService解决点我达骑手APP消息提醒机制中的优先级排序问题

点我达骑手APP采用IntentService解决消息提醒的优先级排序问题,确保高优先级声音在播放过程中不被低优先级声音打断。文章详细探讨了播放音频的不同方法,包括主线程、新建Thread和使用IntentService,并最终确定IntentService为最佳解决方案,以实现任务自动关闭和插入任务时的顺序处理。
摘要由CSDN通过智能技术生成

最新版的点我达骑手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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值