AndroidBlockGuardPolicy.onReadFromDisk FileInputStream Violation
В настоящее время в моем приложении включен ScrictMode, чтобы определить, где я могу облегчить работу в потоке пользовательского интерфейса, и в настоящее время я получаю нарушение FileInputStream onReadFromDisk, когда я создаю новый экземпляр FileInputStream, а затем использую его для установки источника данных моего Медиа-плейер. Я создал отдельный поток для загрузки файла в экземпляр FileInputStream и установил источник данных моего MediaPlayer, но ScrictMode по-прежнему сообщает о наличии нарушения onReadFromDisk при попытке создать экземпляр FileInputStream. Код выглядит следующим образом:
final Handler uiHandler = new Handler(Looper.getMainLooper());
Thread loadInputStream = new Thread(new Runnable() {
@Override
public void run() {
try {
if (m_mediaPlayer == null)
m_mediaPlayer = new MediaPlayer();
FileInputStream fileInputStream = new FileInputStream(path);
m_mediaPlayer.setDataSource(fileInputStream.getFD());
fileInputStream.close();
m_mediaPlayer.setOnErrorListener(MainActivity.this);
m_mediaPlayer.setOnPreparedListener(MainActivity.this);
m_mediaPlayer.setOnCompletionListener(MainActivity.this);
m_mediaPlayer.prepare();
} catch (final Exception e) {
uiHandler.post(new Runnable() {
@Override
public void run() {
LogException(e.getMessage() + " (path == " + path + ")", "playVideo()");
}
});
}
}
});
loadInputStream.run();
Я осмотрел SO и нашел другой пост, в котором говорилось, что мне следует сбросить политику потоков StrictMode, которую я пробовал, но я все еще получаю отчет о нарушении.
Вот как выглядит отчет LogCat ScrictMode:
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1107)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:106)
at libcore.io.IoBridge.open(IoBridge.java:400)
at java.io.FileInputStream.<init>(FileInputStream.java:78)
at java.io.FileInputStream.<init>(FileInputStream.java:105)
at com.subdc.subdcmain.MainActivity$6.run(MainActivity.java:440)
at java.lang.Thread.run(Thread.java:856)
at com.subdc.subdcmain.MainActivity.playVideo(MainActivity.java:467)
Есть идеи, что я делаю не так?
Большое спасибо.
2 ответа
Вы должны start()
нить. Если вы просто позвоните run()
в основном потоке все будет выполнено в основном потоке
Чтобы начать обсуждение, позвоните start()
не run()
, Прямо сейчас вы просто управляете run()
метод в текущей теме.