我在物理设备(三星Galaxy S4)上运行Alloy项目,在第一次打开的事件中,窗口的打开速度非常慢。例如,在点击按钮上打开一个窗口可能需要10秒钟,具体取决于"多少stuf"窗口包含。但我不认为我做了一些与众不同的事情,下面的示例窗口。 窗口打开一次然后关闭后,第二次几乎立即打开。因为它在某种程度上"在记忆中"。
示例窗口:
<Alloy>
<Window>
<View id="container" class="container">
<View id="imageContainer">
<ImageView id="imageView"></ImageView>
</View>
<View id="infoContainer">
<Label id="infoHeaderLabel">L('logged_in_as')</Label>
<View class="divider top5"></View>
<Label id="nameLabel" class="top10"></Label>
<Label id="emailLabel" class="top5"></Label>
<Label id="organizationLabel" class="top5"></Label>
<View class="divider top10"></View>
</View>
<TableView id="tableView">
<TableViewRow identifier="coach" title="L('coach')" hasChild=true if="!Alloy.Globals.usertypeIsCoach && !Alloy.Globals.isFreeTierUser"></TableViewRow>
<TableViewRow identifier="export" title="L('button_export')" hasChild=true if="Alloy.Globals.localDatabaseDoesExist"></TableViewRow>
<TableViewRow identifier="logout" title="L('button_logout')" hasChild=true></TableViewRow>
</TableView>
</View>
</Window>
var args = $.args;
var arrowdb = require('arrowdb');
var Util = require('utilities');
function setUserInformation(){
$.imageView.image = Alloy.Globals.getOrganization() ? Alloy.Globals.getOrganization().image_url : '';
var user = Alloy.Globals.getUser();
$.nameLabel.text = user.firstName +' '+user.lastName;
$.emailLabel.text = user.email;
$.organizationLabel.text = Alloy.Globals.getOrganization() ? Alloy.Globals.getOrganization().name : '';
}
setUserInformation();
function showLogoutDialog() {
var dialog = Ti.UI.createAlertDialog({
cancel : 0,
buttonNames : [L('button_cancel'),L('button_logout')],
title : L('confirm')
});
dialog.addEventListener('click', function(e) {
if (e.index === 1) {
logoutUser();
}
});
dialog.show();
}
function logoutUser() {
arrowdb.logout().then(function(result){
if(result.success){
Alloy.Globals.removeUser();
Util().showLoginWindow();
}
}, function(error){
alert(error);
});
}
// ----------------------------------------------------------------------------------------------------------------------------
// --------------------------------------------- EVENT LISTENERS --------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------
$.tableView.addEventListener('click', function(e){
switch(e.source.identifier){
case 'coach':
var chooseCoachController = Alloy.createController('chooseCoach').getView();
chooseCoachController.open();
break;
case 'logout':
showLogoutDialog();
break;
}
});
窗口确实需要两个其他文件,它们只是Utility模块,其中&#34; arrowdb&#34;有依赖性,需要在片刻,ti.cloud和Q库,但我仍然不认为这么多代码需要在物理设备上花费10秒钟?
答案 0 :(得分:1)
这是第一次加载还是几次开启后?
我注意到了几件事:
没有清理/ onClose代码,因此您的窗口将完全处于活动状态并监听事件。
您在窗口加载之前设置用户详细信息,一旦使用onOpen事件加载窗口,就应该这样做。
尝试一下,看看它是否加速,唯一要检查的另一件事(特别是对于旧设备)是在ti.xml中启用大堆
答案 1 :(得分:1)
有趣的是,这个问题只发生在开发中。我试图打包apk并通过usb传输手动安装在我的手机上,并且窗口立即打开,没有任何延迟,如前所示。 (相同的代码和窗口需要10-15秒才能打开)。 也在Google Play上发布应用程序并且工作正常。 我最好的猜测是,这与LiveView有关吗?:/无论哪种方式,问题都没有解决,但问题不再存在问题:)