3

最近、AndroidDeveloperConsoleで次のクラッシュのレポートが表示されることに気付きました。

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

まあ、戦略的には、これはやや攻撃的なStrictModeロジックのように感じgetHostByAddrImpl()ます。実際にネットワークI / O呼び出しをブロックするリスクがなければ、将来修正される可能性があります。

戦術的にはsetDataSource()、特にソースがネットワーク(、、など)を指している場合は、呼び出しをバックグラウンドスレッドにhttp移動する必要がありますrtsp

于 2012-12-14T20:51:21.023 に答える