3

同時にいくつかの音を再生する monodroid アプリを使用していますが、ログにはこのようなメッセージがたくさんあります。どういう意味ですか?

W/AudioFlinger(   34): write blocked for 84 msecs, 2153 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 69 msecs, 2182 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 76 msecs, 2205 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 70 msecs, 2236 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 73 msecs, 2269 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 75 msecs, 2300 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 70 msecs, 2325 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 69 msecs, 2356 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 75 msecs, 2386 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 70 msecs, 2418 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 80 msecs, 2445 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 71 msecs, 2473 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 90 msecs, 2498 delayed writes, thread 0xc658
W/AudioFlinger(   34): write blocked for 72 msecs, 2528 delayed writes, thread 0xc658
4

4 に答える 4

4

これらのメッセージを無視する必要があることを意味します。:-)

すべてのメッセージには、括弧内の値であるプロセス ID (pid) が含まれています。これらのメッセージは pid 34 から送信されています。プロセスが pid 34 である可能性はほとんどありません。

adb shell psプロセスのリストを取得するために使用できます。

たとえば、Nexus One では次のように表示されます。

W/AudioFlinger(14104): write blocked for 172 msecs, 901 delayed writes, thread 0xea50

pid 14104 とは何ですか?

$ adb shell ps | grep 14104
media     14104 1     23992  1996  ffffffff 00000000 S /system/bin/mediaserver

/system/bin/mediaserver確かに、過度に心配する必要のあるアプリではありません。:-)

Mono for Android プロセスの pid はどのように決定しますか? プロセスの起動メッセージを探す。プロセスの起動時に、Android はContentProviderプロセスにロードしているすべての を一覧表示します。興味深いのは__mono_init__プロバイダーです。

I/ActivityThread(  602): Pub TouchTest.TouchTest.__mono_init__: mono.MonoRuntimeProvider

上記のメッセージは Mono for Android プロセスからのものであるため、以降の pid 602 のメッセージ (この場合) はすべてアプリからのメッセージになります。他の pid は自由に無視できます。

于 2012-06-08T14:35:00.370 に答える
3

無視できるものかもしれないし、そうでないかもしれません。そのメッセージを出力しているプロセスは確かにあなたのアプリではありませんが、それはメッセージがあなたのアプリによって引き起こされていないという意味ではありません. アプリケーションは Mediaserver プロセスに存在する AudioFlinger と Binder を介して通信しているため、警告メッセージの PID はアプリの PID ではありません。ただし、このメッセージは、オーディオ データが実際に再生されるはずの速度よりも速くデータを再生するように AudioFlinger が要求されていることが原因である可能性があります (サンプルレート、チャネル数、およびバッファーのサイズに基づく)。アプリが生データを書き込むために AudioTrack クラスを使用している場合 (それは複数のスレッドから行われますか?)、おそらくデータは再生よりも速く送信されるため、AudioFligner は「オーバーロード」されます。

于 2012-12-11T20:58:11.073 に答える
2

Google で簡単に検索したところAudioFlinger、最低限必要なオーディオ機能を提供するオーディオ ソフトウェアの実装が見つかりました。これAudioHardwareInterfaceは基本的に、Android プラットフォームからドライバー固有のオーディオ実装を隠すハードウェア抽象化レイヤーです (下の画像を参照)。

ここに画像の説明を入力

Android フレームワークを強化するライブラリは、開発者と同様に、logcat に情報を記録できます。一部のデバイスは途方もない量をログに記録します (つまり、私の経験では、Samsung デバイスに電力を供給するライブラリ) が、ほとんどログを記録しないデバイスもあります。いずれにしても、これらのログは Android オペレーティング システムの内部動作に固有のものであるため、心配する必要はありません。アプリの問題は反映されません。それらは無視できます。

于 2012-06-08T14:55:50.080 に答える
0

はい、Jnopが言ったように無視しましょう。誰かに役立つかもしれない私の経験を共有しましょう。通常、これらのメッセージは無視します。これは、機能に問題がなく、Android プラットフォームがカーネル プロセス、ライブラリ、アプリケーション フレームワークなどに関する多くの情報をログに記録するためです。これらの情報は、アプリケーション開発者ではなく API 開発者にとって役立つ可能性があります。

NDK を使用してアプリを開発する場合、ネイティブ メソッドの知識は明らかに役に立ちます。

MediaPlayback および MediaPlayer API のドキュメントから必要な場合は、概念を理解することをお勧めします。

1) http://developer.android.com/guide/topics/media/mediaplayer.html 2) キー クラスとは 3) MediaPlay バック実装の最適なアプローチ 4) https://groups.google.com/forum /?fromgroups#!topic/android-developers/s6Bqu3K20Ng

また、すでに実装している場合は、これに関する経験を共有してください。これらは Mediaplayer の既知の問題であり、Android 開発チームは何らかの理由でこれにあまり関心を示していない可能性があると強く感じているためです。

一時停止ボタンをクリックして、ログに記録された長いメッセージを停止したり、logcat ウィンドウを簡単にスクロールしたりできます。

于 2012-06-15T06:59:51.280 に答える