0

Im Ausführen eines Alloy-Projekts auf einem physischen Gerät (Samsung Galaxy S4), ist das Öffnen von Windows unglaublich langsam auf dem ersten offenen Ereignis. Zum Beispiel kann das Öffnen eines Fensters bei einem Klick auf die Schaltfläche bis zu 10 Sekunden dauern, abhängig davon, wie viel "stuf" das Fenster enthält. Aber ich denke nicht, dass ich etwas Außergewöhnliches mache, siehe Beispielfenster unten. Nachdem das Fenster einmal geöffnet und dann geschlossen wurde, öffnet es sich beim zweiten Mal fast augenblicklich. Da war es irgendwie "in Erinnerung".Appcelerator langsames Öffnen von Windows auf Android

Beispiel Fenster:

<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; 
    } 
}); 

Das Fenster zwei weitere Dateien erfordern, die nur Hilfsmodule sind, wo hat Abhängigkeiten und erfordern im Moment "arrowdb", ti.cloud und Q libary, aber ich denke immer noch nicht, dass so viel Code auf einem physischen Gerät bis zu 10 Sekunden dauern kann?

+1

Was passiert, wenn Sie einfach das Fenster ohne Code öffnen> zB Kommentar aus der js Datei? – Ray

Antwort

1

Ist dies die erste Ladung oder nach ein paar Öffnen?

Ein paar Dinge, die ich bemerkt:

  1. Es gibt keine/onClose Code Bereinigung ist so Ihre Fenster vollständig im Speicher sitzen aktiv und Hören für Veranstaltungen.

  2. Sie legen die Benutzerdetails fest, bevor das Fenster geladen wurde. Dies sollte wirklich geschehen, sobald das Fenster mit dem Ereignis onOpen geladen wurde.

geben, dass ein Versuch und sehen, ob es beschleunigt, die nur die andere Sache (vor allem für ältere Geräte) zu überprüfen ist, großen Haufen in der ti.xml

+0

Es passiert nur bei der ersten Belastung jedes Windows. Die aufeinanderfolgenden Öffnungen laden alle ziemlich schnell. Das Stripping der Fenster von Code und Komponenten beschleunigt die erste Ladung, also denke ich, dass ich etwas falsch mache. Ich werde rückwärts gehen müssen, um herauszufinden, was ich denke –

1

Interessanterweise das Problem nur zu ermöglichen, tritt in Entwicklung auf. Ich habe versucht, die apk zu verpacken und manuell auf meinem Handy über USB-Übertragung zu installieren, und die Fenster öffnen sofort ohne jede Verzögerung wie zuvor gesehen. (Der gleiche Code und die gleichen Fenster, die zuvor 10-15 Sekunden geöffnet hatten). Auch die App bei Google Play veröffentlicht und t funktioniert gut. Meine beste Vermutung ist, dass dies etwas mit LiveView zu tun hat ?: Wie auch immer, Problem nicht gelöst, aber kein Problem kein Problem mehr :)

Verwandte Themen