Appcelerator在Android上缓慢打开windows

Appcelerator在Android上缓慢打开windows,android,titanium,appcelerator,appcelerator-titanium,appcelerator-alloy,Android,Titanium,Appcelerator,Appcelerator Titanium,Appcelerator Alloy,我在一个物理设备上运行一个合金项目(三星Galaxy S4),在第一次打开事件中,窗口的打开速度非常慢。例如,按一下按钮打开一个窗口可能需要10秒钟,这取决于窗口包含的“stuf”量。但是我不认为我在做任何不寻常的事情,请看下面的示例窗口。 当车窗打开一次然后关闭后,第二次几乎立即打开。因为它不知何故“在记忆中” 示例窗口: <Alloy> <Window> <View id="container" class="container"> <View

我在一个物理设备上运行一个合金项目(三星Galaxy S4),在第一次打开事件中,窗口的打开速度非常慢。例如,按一下按钮打开一个窗口可能需要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>

该窗口确实需要另外两个文件,它们只是实用程序模块,其中“arrowdb”具有依赖性,并且在瞬间需要ti.cloud和Q libary,但我仍然不认为在物理设备上花费10秒就需要这么多代码?

这是在第一次加载时发生的还是在打开几次之后发生的

我注意到两件事:

  • 没有清除/关闭代码,因此您的窗口将完全处于活动状态并侦听事件

  • 您甚至在加载窗口之前就设置了用户详细信息,这实际上应该在使用onOpen事件加载窗口之后完成


  • 试一试,看看它是否加快了速度,唯一需要检查的另一件事(尤其是对于较旧的设备)是在ti.xml中启用大型堆。这是在第一次加载时发生的还是在几次打开后发生的

    我注意到两件事:

  • 没有清除/关闭代码,因此您的窗口将完全处于活动状态并侦听事件

  • 您甚至在加载窗口之前就设置了用户详细信息,这实际上应该在使用onOpen事件加载窗口之后完成


  • 试一试,看看它是否加快了速度,唯一需要检查的另一件事(特别是对于较旧的设备)是在ti.xml中启用大型堆。有趣的是,这个问题只发生在开发中。我尝试将apk打包,并通过usb传输手动安装到手机上,windows立即打开,没有任何延迟,如前所述。(与之前花费10-15秒打开的代码和窗口相同)。 同时在Google Play上发布了该应用程序,t运行良好。
    我的最佳猜测是,这与LiveView有关?:/无论哪种方式,问题都没有解决,但问题不再是问题:)

    有趣的是,问题只发生在开发中。我尝试将apk打包,并通过usb传输手动安装到手机上,windows立即打开,没有任何延迟,如前所述。(与之前花费10-15秒打开的代码和窗口相同)。 同时在Google Play上发布了该应用程序,t运行良好。
    我最好的猜测是这与LiveView有关?:/无论哪种方式,问题都没有解决,但是问题没有问题没有问题了:)

    如果只打开没有代码的窗口>即注释掉js文件会发生什么?如果只打开没有代码的窗口>即注释掉js文件会发生什么?这只会在每个窗口的第一次加载时发生。连续的开口几乎都是瞬间加载的。跨越代码和组件的窗口加速了第一次加载,所以我猜我做错了什么。我得回去看看我到底在干什么guess@OutofOrbit“你弄明白了吗?”MathiasLykkegaardLorenzen不幸的是,我不记得我是否解决了它。但有一小部分记忆说,我在窗口“加载”中摆弄事件列表器。并在加载事件后启动了窗口中应该发生的所有事情。非常感谢您回来向我解释这一点!荣誉它只发生在每个窗口的第一次加载上。连续的开口几乎都是瞬间加载的。跨越代码和组件的窗口加速了第一次加载,所以我猜我做错了什么。我得回去看看我到底在干什么guess@OutofOrbit“你弄明白了吗?”MathiasLykkegaardLorenzen不幸的是,我不记得我是否解决了它。但有一小部分记忆说,我在窗口“加载”中摆弄事件列表器。并在加载事件后启动了窗口中应该发生的所有事情。非常感谢您回来向我解释这一点!荣誉
    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;
      }
    });