0

私は、Titanium Appcelerator を使用して、JavaScript を使用してアプリを開発しています。彼らは、CommonJS アプローチを使用することを提案しています。CommonJS の簡単な例は、ここにあります。

私の人生では、コードを構造化する方法をまだ理解できていません。

例:

/* Homescreen.js */
exports.createHomescreen = function () {

    //load all required modules first
    var videoPlayer = require('ui/videoPlayerModule');

    var self = Ti.UI.createWindow({
        width:'100%',
        height:'100%'
    })

    var newPlayer = videoPlayer.createPlayer({
        width:100
        height:50
    });

    self.add(newPlayer);
    return self;
}

videoPlayerModule

/* videoPlayerModule.js */
exports.createPlayer = function (object) {

    //load all required modules first
    var self = Ti.UI.createWindow({
        width:object.width,
        height:object.height
    });

    var exitVideoButton = Ti.UI.createButton({
        width:100,
        height:50
    });

    exitVideoButton.addEventListener('click',function(e){
        self.close();    //When this window is closed, the memory isn't freed.
        self = null;     //Still the memory isn't cleared
    });

    self.add(exitVideoButton);

    return(self);
}

videoPlayer をロードして閉じるたびにメモリがクリアされないため、メモリ割り当ての問題が発生しています。videoPlayer を再度開くと、メモリが再度割り当てられます。このため、私のアプリのメモリ使用量は、videoPlayer が起動されるたびに増加します。

私は自分の考え方が正しくないことを知っています。ここで非常に単純なものを見落としています。誰かが私が正しくしていないことを教えてもらえますか?

4

1 に答える 1

1

これは、Ti.UI.Window(videoPlayerModule.js から作成された) を別のTi.UI.Window(Homescreen.js 内の) に追加しているために発生していますが、これは行うべきではありません。Ti.UI.Windowはベース コンテナー オブジェクトであり、(通常は) 何にも追加しないため、ウィンドウを閉じても、コンテナー ウィンドウの子の 1 つとして参照されたままになるため、消えることはありません。self = null;この時点では何もしません。

ビデオプレーヤーのウィンドウをビューに置き換える必要があります。代わりに、次のようなことを試します。

/* videoPlayerModule.js */
exports.createPlayer = function (object) {

    var self = Ti.UI.createView({
        width:object.width,
        height:object.height
    });

    var exitVideoButton = Ti.UI.createButton({
        width:100,
        height:50
    });

    exitVideoButton.addEventListener('click',function(e){
        self.hide();
    });

    self.add(exitVideoButton);

    return(self);
}

これは完全な解決策ではありません。ビューは引き続きメモリ内に保持されますが、本格的なウィンドウよりもはるかに小さいフットプリントshow()ですhide()。ホームスクリーンのコンテキスト、別の方法は、親を渡し、終了時に親からビューを削除することですが、これによりメモリの問題が解決されます。

于 2013-04-08T02:40:35.773 に答える