8

レベル2のメモリ警告を受け取った後、iOSがmediaserverdと一緒にアプリを投棄しているように見える奇妙なクラッシュが発生しています。これは、DRMコンテンツ(PlayReady暗号化コンテンツを含むがこれに限定されない)の再生中に、他のアプリケーションがバックグラウンドで実行されていない状態でデバイスを再起動した場合でも、再生の約7〜8分後に発生します。ただし、これは一貫して発生するわけではなく、メモリを大量に消費する多数のアプリケーションをバックグラウンドで問題なく使用して、同じコンテンツ(2時間の映画全体)を完成させることができる場合があります。

これは、iOS5.1および5.1.1を実行しているiPhone3GS、4、および4Sデバイスで見られますが、3GSで最も顕著であるように見えます。アプリは「セグメンテーション違反11」または「シグナル9」のいずれかで終了します。セグメンテーション違反11は、メモリアクセスの不良またはメモリ不足を示し、信号9はメモリ不足の終了を示します。

スタティックアナライザと機器の両方を使用してリークを検出して修正しましたが、リーク機器に警告は表示されません。

メモリモニター機器を使用して再生を分析すると、ストリーミングを開始すると、使用可能な物理メモリが劇的に減少することがわかります。これは、ある程度予想されることです。アプリケーション/OSが正常に動作している場合、メモリが少なくなりすぎると他のアプリケーションがバックグラウンドから削除されますが、OSがアプリを強制終了するまで、使用可能な物理メモリが単に低下し続けることがあります。クラッシュログは生成されませんが、次のような低メモリログを受け取ることがあります。

Incident Identifier: 13839D5B-D280-40D8-8C67-6EE3D61394C3
CrashReporter Key:   d3746ff556543d6a94e067d82c8fb379a285f543
Hardware Model:      iPhone2,1
OS Version:          iPhone OS 5.1.1 (9B206)
Kernel Version:      Darwin Kernel Version 11.0.0: Sun Apr  8 21:50:49 PDT
2012; root:xnu-1878.11.10~1/RELEASE_ARM_S5L8920X
Date:                2012-06-28 14:09:56 -0400
Time since snapshot: 104 ms

Free pages:        712
Active pages:      1433
Inactive pages:    1012
Throttled pages:   49925
Purgeable pages:   0
Wired pages:       11870
Largest process:   SpringBoard

Processes
         Name                 UUID                    Count resident pages
         launchd <5fec01c378a030a8bd23062689abb07f>      79
securekeyvaultd. <78f602d3604c3bf487a27a288dec3bbb>     156
           MYAPP <285e46965a91381dad0661443c8be3eb>    4035 (jettisoned) (active)
     MobilePhone <8f3f3e982d9235acbff1e33881b0eb13>     749 (jettisoned)
    mediaserverd <f03b746f09293fd39a6079c135e7ed00>    3670 (jettisoned)
        networkd <80ba40030462385085b5b7e47601d48d>     145
            apsd <e7a29f2034083510b5439c0fb5de7ef1>     260
     SpringBoard <c74dc89dec1c3392b3f7ac891869644a>    4615 (active)
         notifyd <f6a9aa19d33c3962aad3a77571017958>     170
        BTServer <31e82dfa7ccd364fb8fcc650f6194790>     259
CommCenterClassi <041d4491826e3c6b911943eddf6aaac9>     421
      aggregated <a12fa71e6997362c83e0c23d8b4eb5b7>     329
         configd <ee72b01d85c33a24b3548fa40fbe519c>     324
   fairplayd.N88 <ecb9495b29543b35a1f2e6c2b432528c>     168
       fseventsd <914b28fa8f8a362fabcc47294380c81c>     164
            iapd <0a747292a113307abb17216274976be5>     284
         imagent <9c3a4f75d1303349a53fc6555ea25cd7>     412
       locationd <cf31b0cddd2d3791a2bfcd6033c99045>     493
   mDNSResponder <86ccd4633a6c3c7caf44f51ce4aca96d>     182
    mediaremoted <327f00bfc10b3820b4a74b9666b0c758>     208
       lockdownd <b06de06b9f6939d3afc607b968841ab9>     315
          powerd <133b7397f5603cf8bef209d4172d6c39>     143
         syslogd <7153b590e0353520a19b74a14654eaaa>      90
           wifid <3001cd0a61fe357d95f170247e5458f5>     285
  UserEventAgent <dc32e6824fd33bf189b266102751314f>     322
         launchd <5fec01c378a030a8bd23062689abb07f>     120

End

私がここで見たいくつかの古い質問によると、mediaserverdは以前のバージョンのiOSでメモリリークに関して深刻な問題を抱えていたようです。

これは問題に関連している可能性がありますか?

どうすればこれを防ぐことができますか?

アイデア、理論、フィードバック、または同様の問題があれば大歓迎です!

4

1 に答える 1

2

これは単なる推測ですが、AVFoundationのAVPlayerを使用していませんか?このような問題が発生しました。AVPlayerを正しくリリースしていなかったことが判明しました。そのため、すべての曲について、新しいAVPlayerを作成しました。古いものをリリースすれば問題ありませんが、作成しませんでした。Instrumentsで割り当てテストを行ってそれを見つけたところ、AVPlayerはリリースされるはずだった後も生き続けていることがわかりました。

于 2012-12-18T12:47:48.840 に答える