最近、アプリケーションの 1 つでメモリ分析を行っています。アプリケーションは、Android プラットフォーム用に作成されています。2 つの画面で、リークがあることを確認しています。
検証はありません。すべてのコードを削除し、両方のコントローラーで $.screenName.open() 呼び出しのみを保持しました。それらを呼び出す方法は次のとおりです。
Alloy.createController(screenToLaunch, payloadJson);
それぞれのコントローラー内には、open() 呼び出しがありました。DDMS を使用してヒープ分析を行います。
コントローラ A を開く前に、原因 GC を数回押して、安定した割り当てられた読み取り値を取得しました。完了したら、コントローラー A を起動し、戻るボタンを押して閉じます。原因GCを数回クリックすると、毎回60KBの違いがあります。
createController 参照をグローバル変数に保存していません。なぜそれがそのような方法で動作しているのかについての考えはありますか?
上記は、コントローラの開閉の HPROF 差です。私は DB 呼び出しを使用していませんが、多くの DB 関連の呼び出しが行われていることがわかります。フレームワークが内部機能のためにこれらの呼び出しを使用している可能性があると思います。