问题描述
我们的APP与具有fireos 5.1.x的旧版本Kindle Fire HD配合使用正常。 APP仅在具有fireos 7.3.1.4的Kindle HD 8(第10代)上有问题。
这个问题是随机的,有时应用程序工作正常,但有时应用程序表现不佳。
fireos 7.3.1.4使用的是Android API LEVEL 28(Android Pie)
我们有一个带有3个Media Player的音乐APP,我们在我们的APP中使用的是Androids标准Media Player。
所有3个媒体播放器均同时运行,并且我们在每个媒体播放器上运行的音轨具有相同的持续时间。
我们正在后台线程中进行所有处理,例如在所有媒体播放器上播放音乐,因此共有3个线程并行运行。
由于某些故障,问题出在Kindle HD 8(第10代)上,运行在第一媒体播放器上的曲目与第二媒体播放器上的曲目重叠或超出了第二媒体播放器上的曲目。
总体而言,我的意思是,即使3个媒体播放器的持续时间相同并且在同一时间开始,它们的轨道也不同步。
另外一首歌曲开始时没有问题,它们在开始时是同步的,但是大约50秒后,它们开始变得不同步。
该问题是随机发生的。
Again应用程序在较旧版本的Kindle Fire平板电脑和三星手机上均能正常工作,该问题仅在Kindle HD 8(10代)上出现。
因此,如果有人可以帮助我们提供有关新Kindle Fire HD发生的情况的任何解决方案?,我将非常感谢您的帮助。
我的猜测是,运行媒体播放器的后台线程在随机时间出现了一些问题,导致媒体播放器不同步。但我不知道如何纠正这种行为
请帮助我们,因为我们在此问题上受阻,因此我们的用户无法在新的Kindle Fire HD 8平板电脑上使用我们的APP。谢谢
以下是我们拥有的3个Media Player的一些代码片段
我们创建一个新的媒体播放器并在其中添加曲目。代码中的for循环执行了3次。
protected void initTracks(boolean high) {
this.mWavPlayers = new ArrayList<>();
HashMap<TrackType,String> map = null;
if (high) {
map = mPathHigh;
} else {
map = mPathLow;
}
try {
for (Map.Entry<TrackType,String> entry : map.entrySet()) {
MediaPlayer player = new MediaPlayer();
player.setDataSource(entry.getValue());
player.prepare();
mWavPlayers.add(new WavPlayerItem(entry.getValue(),entry.getKey(),player));
if (entry.getKey().equals(TrackType.backing_MUSIC)) {
mDuration = player.getDuration();
}
}
} catch (IOException e) {
Log.e(TAG,"Map exception",e);
}
}
protected void sendState(WavPlayerEvent.State state) {
CyclicBarrier barrier = new CyclicBarrier(mWavPlayers.size() + 1);
for (WavPlayerItem item : mWavPlayers) {
MediaPlayer player = (MediaPlayer) item.getPlayer();
new Thread(new SyncedStateRunnable(state,player,barrier,STATE.PLAYER)).start();
}
}
private class SyncedStateRunnable<T> implements Runnable {
private WavPlayerEvent.State state;
private MediaPlayer player;
private NativeSuperpoweredRecorder recorder;
private CyclicBarrier cyclicBarrier;
private STATE entityState;
SyncedStateRunnable(WavPlayerEvent.State state,T entity,CyclicBarrier cyclicBarrier,STATE entityState) {
this.state = state;
this.cyclicBarrier = cyclicBarrier;
this.entityState = entityState;
switch (entityState) {
case PLAYER:
player = (MediaPlayer) entity;
break;
}
}
@Override
public void run() {
awaitBarrier();
switch (state) {
case PLAYING:
start();
break;
case STOP:
stop();
break;
case PAUSE:
pause();
break;
}
}
private void start() {
switch (entityState) {
case PLAYER:
try {
player.start();
Log.d(TAG,"player.start();");
} catch (IllegalStateException e) {
e.printstacktrace();
}
break;
}
}
解决方法
我将检查控制minSdkVersion和 targetSdkVersion并对其进行了修改。
,您是否修改了minSdkVersion并将targetSdkVersion保持不变?