AudioManager的unloadSoundEffects方法,用来卸载音效,代码如下:
//frameworks/base/media/java/android/media/AudioManager.java
public class AudioManager {
public void unloadSoundEffects() {
final IAudioService service = getService();
try {
service.unloadSoundEffects();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}
调用IAudioService的unloadSoundEffects方法,IAudioService是一个接口,由AudioService实现:
//frameworks/base/services/core/java/com/android/server/audio/AudioService.java
public class AudioService extends IAudioService.Stub
implements AccessibilityManager.TouchExplorationStateChangeListener,
AccessibilityManager.AccessibilityServicesStateChangeListener,
AudioSystemAdapter.OnRoutingUpdatedListener,
AudioSystemAdapter.OnVolRangeInitRequestListener {
public void unloadSoundEffects() {
sendMsg(mAudioHandler, MSG_UNLOAD_SOUND_EFFECTS, SENDMSG_QUEUE, 0, 0, null, 0);
}
}
发送MSG_UNLOAD_SOUND_EFFECTS消息:
//frameworks/base/services/core/java/com/android/server/audio/AudioService.java
public class AudioService extends IAudioService.Stub
implements AccessibilityManager.TouchExplorationStateChangeListener,
AccessibilityManager.AccessibilityServicesStateChangeListener,
AudioSystemAdapter.OnRoutingUpdatedListener,
AudioSystemAdapter.OnVolRangeInitRequestListener {
private class AudioHandler extends Handler {
private SoundEffectsHelper mSfxHelper;
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_UNLOAD_SOUND_EFFECTS:
mSfxHelper.unloadSoundEffects();
break;
}
}
}
}
SoundEffectsHelper unloadSoundEffects
调用SoundEffectsHelper的unloadSoundEffects方法:
//frameworks/base/service/java/com/android/server/audio/SoundEffectsHelper.java
class SoundEffectsHelper {
void unloadSoundEffects() {
sendMsg(MSG_UNLOAD_EFFECTS, 0, 0, null, 0);
}
}
发送MSG_LOAD_EFFECTS消息,消息在SfxHandler的handleMessage中处理:
//frameworks/base/service/java/com/android/server/audio/SoundEffectsHelper.java
class SoundEffectsHelper {
private class SfxHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_LOAD_EFFECTS:
onLoadSoundEffects((OnEffectsLoadCompleteHandler) msg.obj); //根据XML文件初始化数组
break;
}
}
}
}
SoundEffectsHelper onUnloadSoundEffects
调用onLoadSoundEffects方法:
//frameworks/base/service/java/com/android/server/audio/SoundEffectsHelper.java
class SoundEffectsHelper {
void onUnloadSoundEffects() {
if (mSoundPool == null) {
return;
}
if (mSoundPoolLoader != null) {
mSoundPoolLoader.addHandler(new OnEffectsLoadCompleteHandler() {
@Override
public void run(boolean success) {
onUnloadSoundEffects();
}
});
}
logEvent("effects unloading started");
for (Resource res : mResources) {
if (res.mSampleId != EFFECT_NOT_IN_SOUND_POOL) {
mSoundPool.unload(res.mSampleId);
res.unload();
}
}
mSoundPool.release();
mSoundPool = null;
logEvent("effects unloading completed");
}
}
SoundPool unload
调用SoundPool的unload方法:
待更新
SoundPool release
调用SoundPool的release方法:
待更新