Syncing ich große app bin zu entwickeln, die alle X Minuten (für Tests sagen 5 Minuten) wird durch AlarmManger Aufruf:Seltsam hinkt während app
mAlarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, nextSyncTime.getMillis(), PendingIntent.getBroadcast(this, INTERVAL_SYNC_SERVICE_REQ_CODE, new Intent(SYNC_ACTION), PendingIntent.FLAG_UPDATE_CURRENT));
Klasse ScheduledRecevier für SYNC_ACTION hört und IntentService starten. Während dieses Dienstes werden mehrere (ca. 25) APIs mit Retrofit2 zum selben Server aufgerufen. Einer nach dem anderen - wenn man mit dem Herunterladen und Schreiben in Datebase fertig ist, wird ein anderer gestartet. Und so weiter.
Mein Problem ist, dass, während ich nicht Gerät verwende diesen Prozess verschiedene Zeiten dauern. Ich meine: die meisten, wenn die Zeit es ist ca. 2 Minuten, max 3, aber manchmal (8-16 mal pro Tag) es etwa 10 Minuten dauern: O
Hier ist log:
11:23:09.064 8388-8388/myApp V/ScheduledReceiver: Sync from alarm
11:23:09.154 8388-9007/myApp V/SynchronizationService: Sync started
11:23:10.474 8388-9007/myApp V/Sync1: Sync completed
11:23:10.604 8388-9007/myApp V/Sync2: Sync completed
11:23:10.724 8388-9007/myApp V/Sync3: Sync completed
11:23:11.555 8388-9007/myApp V/Sync4: Sync completed
11:23:11.766 8388-9007/myApp V/Sync5: Sync completed
11:24:18.248 8388-9007/myApp V/Sync6: Sync completed
11:24:18.496 8388-9007/myApp V/Sync7: Sync completed
11:25:19.813 8388-8399/myApp I/art: Background sticky concurrent mark sweep GC freed 127447(6MB) AllocSpace objects, 3(204KB) LOS objects, 37% free, 11MB/19MB, paused 1.257ms total 104.434ms
11:26:27.355 8388-9007/myApp V/Sync8: Sync completed
11:31:20.562 8388-8388/myApp I/Timeline: Timeline: Activity_idle id: [email protected] time:67843774
11:31:22.592 8388-8388/myApp I/Timeline: Timeline: Activity_launch_request id:com.santander.msantander time:67845808
11:31:22.722 8388-8388/myApp D/SecWifiDisplayUtil: Metadata value : SecSettings2
11:31:22.852 8388-8388/myApp I/Timeline: Timeline: Activity_idle id: [email protected] time:67846063
11:31:24.642 8388-8388/myApp I/Timeline: Timeline: Activity_idle id: [email protected] time:67847852
11:31:30.302 8388-9007/myApp V/Sync9: noUpdate
11:31:30.472 8388-8399/myApp I/art: Background sticky concurrent mark sweep GC freed 245773(8MB) AllocSpace objects, 0(0B) LOS objects, 29% free, 20MB/28MB, paused 1.481ms total 156.454ms
11:31:30.982 8388-9007/myApp V/Sync10: Sync completed
BEGIN_DATE
2017-02-24 11:23:07.617
END_DATE
2017-02-24 11:31:32.303
11:36:35.162 8388-8388 /myApp V/ScheduledReceiver: Sync from alarm
11:36:35.172 8388-13586/myApp V/SynchronizationService: Sync started
11:36:37.202 8388-13586/myApp V/Sync1: Sync completed
11:36:37.392 8388-13586/myApp V/Sync2: Sync completed
11:36:37.572 8388-13586/myApp V/Sync3: Sync completed
11:36:38.232 8388-13586/myApp V/Sync4: Sync completed
11:36:38.482 8388-13586/myApp V/Sync5: Sync completed
11:36:39.812 8388-13586/myApp V/Sync6: Sync completed
11:36:40.072 8388-13586/myApp V/Sync7: Sync completed
11:36:40.632 8388-13586/myApp V/Sync8: Sync completed
11:36:49.432 8388-8399/ myApp I/art: Background sticky concurrent mark sweep GC freed 266493(10MB) AllocSpace objects, 1(68KB) LOS objects, 40% free, 15MB/26MB, paused 1.661ms total 125.890ms
11:36:54.392 8388-8399/ myApp I/art: Background partial concurrent mark sweep GC freed 301387(10MB) AllocSpace objects, 1(68KB) LOS objects, 50% free, 15MB/31MB, paused 1.572ms total 145.270ms
11:36:56.992 8388-13586/myApp V/Sync9: noUpdate
11:36:57.172 8388-13586/myApp V/Sync10: Sync completed
BEGIN_DATE
2017-02-24 11:36:34.180
END_DATE
2017-02-24 11:37:00.540
Zur Vereinfachung Ich rief clipped an APIs SyncX an, um zu zeigen, dass dies in beiden Fällen der gleiche Pfad ist. Ich habe den Rest der Synchronisierung ausgelassen und eingefügt, was in datebase als Synchronisierungsstartzeit und Endzeit protokolliert wurde.
Wie Sie im ersten Fall um 11:23 Uhr sehen können, begann die Synchronisierung von Alarm und endete um 11:31 Uhr. Im zweiten Fall hat es um 11:36 begonnen und endete um 11:37 Uhr
In beiden Fällen gab es den gleichen Teil der Daten. Alle Synchronisierungen haben einen ähnlichen Prozess: Tabelle löschen, Tabelle erstellen, neue Daten einfügen (Sammlungslöschung funktioniert nicht in einem so großen Teil der auszutauschenden Daten). Sync7, Sync8, Sync9 unterscheiden sich dabei nicht.
Jeder hat eine Idee, wie man das verbessert, um kurze Zeiten zu haben? Alle Anrufe sind mit Login und Passwort aus der lokalen Datenbank und müssen direkt von der App aus angerufen werden, um den Server zu erreichen (sicherer Arbeitsbereich).
Danke, ich werde das versuchen :) Danke für den Tipp :) – masztalski
Viel Glück. :) Hoffentlich finden Sie bald eine Lösung. :) –