私はメモリリークについてフレックスモバイルアプリケーションのプロファイルを作成しようとしてきましたが、非常に説明のつかない結果が得られたため、フレックスメモリ管理が信頼できるかどうかを確認するために考えられる最も基本的なテストを行うことにしました。
FirstView.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:View
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="FirstView"
>
<s:Button
label="Go to child"
click="navigator.pushView(ChildView)"
/>
</s:View>
ChildView.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:View
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
title="ChildView"
>
<s:Button
label="Back to home"
click="navigator.popView()"
/>
</s:View>
それでおしまい。これ以上簡単にすることはできません。
したがって、メモリプロファイラーを使用してこれをプロファイリングしようとする場合は、次のようにします。
- アプリを起動し、スナップショットを撮ります
- 子ビューに移動して戻ってから、ガベージコレクションを実行し、スナップショットを作成します。
- 手順2を数回繰り返します
次に、任意の2つのスナップショットで「浮浪オブジェクトの検索」を試してみてください。最初のビューに戻った後、100を超えるオブジェクトが「浮浪」しており、チャイルドビューのすべてが破棄されているはずです。メモリ管理の観点からこれをより単純または「よりクリーン」にする方法は考えられないため、これは本当に落胆します。
これらのオブジェクトが作成され、破棄されない理由を誰かが明らかにすることはできますか?また、破壊されたビューに関連するすべてのメモリを実際に削除する、本当にクリーンなビューベースのモバイルアプリを入手するためのヒントは素晴らしいでしょう。
これまでのところ:
- 常に弱いイベントリスナーを追加します
- ビューを閉じるときに変数をnullに設定します(およびイベントリスナーを削除します)
ありがとうアンディ