Meine App läuft bereits zufriedenstellend schnell auf meinem S10. Nun testete ich das ganze auf einem Tablet mit Android 4.4.
Die 100msec Startzeit werden hier zu lähmenden 15sec. In dieser Zeit geschieht nichts auf dem Bildschirm. d.h. hier muss ich irgendwie asynchron laden und dem User irgend ein Erlebnis bieten. Schön wäre, wenn alle 300msec etwas passiert.
Das Laden läuft derzeit in 4 Phasen ab:
1.Phase
Die App startet. Da vergehen gefühlt schon 10 sec.
2.Phase
Ich fordere einen 35MByte großen Byte-Stream aus dem AssetDir an. Das dauert schon weitere 10sec und besteht leider nur aus einem einzigen Befehl:
Später fordere ich ähnliche Streams aus dem DirInternal an. Gleiche Vorgehensweise
3.Phase
Dann folgt das Umkopieren in einen SHORT-Stream. Dauert nur 1sec. Ist aber auch nur ein Befehl.
4.Phase
Dann folgt ein Eintragen der Werte in ein Riesen-Array. Das dauert zwar weitere 4sec, aber ich kann es 20x unterbrechen, um dem User was zu zeigen.
Nun meine Fragen dazu.
1.
Wenn die App startet, vergehen gefühlt schon 10 sec. Hat das mit der 35MByte-Asset-Datei zu tun, oder ist die nach einer Installation bereits abgetrennt von der eigentlich ausführenden Datei?
2.
Ist es irgendwie möglich aus der 35MByte Asset-Datei zunächst nur die ersten 10000 Bytes zu lesen? Dann hätte ich schon mal genügend Informationen, um den heutigen Bildschirm für den User zu erstellen.
3.
Kann ich die 35MByte-Datei so lesen, das ich über ihren Fortschritt informiert werde?
4.
Wie kann ich den User informieren, ohne das Laden noc hweiter zu verzögern?
5.
Würdet ihr es ganz anders angehen?
Die 100msec Startzeit werden hier zu lähmenden 15sec. In dieser Zeit geschieht nichts auf dem Bildschirm. d.h. hier muss ich irgendwie asynchron laden und dem User irgend ein Erlebnis bieten. Schön wäre, wenn alle 300msec etwas passiert.
Das Laden läuft derzeit in 4 Phasen ab:
1.Phase
Die App startet. Da vergehen gefühlt schon 10 sec.
2.Phase
Ich fordere einen 35MByte großen Byte-Stream aus dem AssetDir an. Das dauert schon weitere 10sec und besteht leider nur aus einem einzigen Befehl:
B4X:
Private zeit As Long = DateTime.now
Private buffer() As Byte
buffer = File.ReadBytes(File.DirAssets,"MeineDaten.dat")
Log("ZEIT nach buffer=" & (DateTime.now-zeit))
3.Phase
Dann folgt das Umkopieren in einen SHORT-Stream. Dauert nur 1sec. Ist aber auch nur ein Befehl.
B4X:
Public Converter As ByteConverter
...
Private Value() As Short
Converter.LittleEndian=True
Value=Converter.ShortsFromBytes(buffer)
Log("ZEIT nach Converter=" & (DateTime.now-zeit))
4.Phase
Dann folgt ein Eintragen der Werte in ein Riesen-Array. Das dauert zwar weitere 4sec, aber ich kann es 20x unterbrechen, um dem User was zu zeigen.
Nun meine Fragen dazu.
1.
Wenn die App startet, vergehen gefühlt schon 10 sec. Hat das mit der 35MByte-Asset-Datei zu tun, oder ist die nach einer Installation bereits abgetrennt von der eigentlich ausführenden Datei?
2.
Ist es irgendwie möglich aus der 35MByte Asset-Datei zunächst nur die ersten 10000 Bytes zu lesen? Dann hätte ich schon mal genügend Informationen, um den heutigen Bildschirm für den User zu erstellen.
3.
Kann ich die 35MByte-Datei so lesen, das ich über ihren Fortschritt informiert werde?
4.
Wie kann ich den User informieren, ohne das Laden noc hweiter zu verzögern?
5.
Würdet ihr es ganz anders angehen?