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.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是一个基础容器对象,你永远不会将它添加到任何东西(通常),所以当你关闭窗口时,它仍然作为容器窗口的子对象之一被引用,所以它永远不会消失。你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 回答