3

我最近注意到我在我的 Android 开发者控制台中收到了以下崩溃的报告:

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
at java.net.InetAddress.getHostByAddrImpl(InetAddress.java:440)
at java.net.InetAddress.getHostName(InetAddress.java:313)
at android.media.MediaPlayer.checkHostdata(MediaPlayer.java:869)
at android.media.MediaPlayer.isLocalhost(MediaPlayer.java:940)
at android.media.MediaPlayer.setDataSourceBase(MediaPlayer.java:980)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1085)
[the rest is irrelevant]

似乎在MediaPlayer.setDataSource方法的某个地方有一些代码会触及导致 StrictMode 吠叫的网络。这有点令人惊讶,因为在主线程上调用 setDataSource 似乎是常见的做法。

所以我的问题是,处理这个问题的最佳方法是什么?我应该将 mediaPlayer 移出主线程吗?我应该忽略它吗?或者是其他东西?

4

1 回答 1

3

好吧,从战略上讲,这感觉有点过于激进的逻辑,如果真的没有进行阻塞网络 I/O 调用的风险,StrictMode将来可能会得到修复。getHostByAddrImpl()

从策略上讲,您应该将setDataSource()调用移至后台线程,特别是当源指向网络时(httprtsp等)。

于 2012-12-14T20:51:21.023 回答