Retrofit Langsamere Reaktionszeit in echten Android-Geräten im Vergleich zu Emulator und Web

8

Ich mache einen erholsamen API-Anruf vom Android-Gerät, um eine Listenansicht zu füllen.

  

Ich habe swagger codegen verwendet, um meinen Retrofit-Client zu generieren.

     

Dolch 2 für die Abhängigkeitsinjektion

     

Gerät: Asus Zenfone 5

Ich habe versucht, vom Postboten, Web und auch im Emulator (genymotion) zu telefonieren, es ist viel schneller im Vergleich zu einem echten Gerät.

Und interessant ist, dass jedes Mal, wenn ich mein Telefon für zwei bis drei Anfragen neu starte, die Antwortzeit normal ist und danach langsamer wird.

Ich habe einen Blog über die Gzip-Komprimierung in okHTTP gelesen und versuche das zu implementieren, aber keinen Effekt.

Es wäre wirklich hilfreich, wenn mir jemand helfen könnte, das Problem zu lösen.

    
Rahul 18.02.2016, 10:15
quelle

3 Antworten

2

Wenn ich meine App im Debugger ausführe, war sie unbrauchbar langsam. Wenn ich es außerhalb des Debuggers ausführe, funktioniert es besser.

  

Also Schlussfolgerung ist, dass erwähnt Problem nicht mit Werkzeug und verwandt war   Bibliotheken, die ich benutzt habe. Problem war mit USB-Debugging.

     

Seit ich neu in der Android-Entwicklung war, war mir nicht bewusst   Leistung der APP im USB-Debugging-Modus.

    
Rahul 29.02.2016, 07:40
quelle
4

Langsame Antwort hat nichts mit Ihrem Telefon zu tun, es kann verschiedene Ursachen haben. Einige bemerkenswerte Gründe, die ich kenne, sind unten erwähnt.

1) Die Internetverbindung auf Ihrem Gerät ist möglicherweise langsamer als bei Ihrem Emulator, der die Netzwerkverbindung Ihres Geräts verwendet (WLAN oder LAN-Verbindung).

2) Es gibt mehrere Anwendungen, die das Internet auf Ihrem Gerät im Hintergrund verwenden. Überprüfen Sie die Anwendung, die den Hintergrundprozess ausführt, und stoppen Sie sie.

Um sicherzustellen, dass Ihre Internetgeschwindigkeit auf Ihrem Gerät mit speedtest.net getestet wird. Hoffe es hilft dir.

    
CodingRat 23.02.2016 07:10
quelle
3

Beim Retrofit macht es folgende Arbeit:

  1. Erstellen Sie die Klasse Retrofit .
  2. Erweitern Sie die Schnittstelle mit DynamicProxy
  3. Analysiere und erstelle die HTTP-Anfrage, die den Annotationen entspricht.
  4. Senden und empfangen Sie HTTP (Socket) IOs mit OKHttp in ThreadPool (In Android, Netzwerk kann nicht auf Haupt-Thread getan werden).
  5. Deserialisieren Sie Ihren Http-Body mit einer Lib (zB gson).
  6. Aktualisiere UI beim Rückruf.

In deinem Telefon denke ich, dass 1,2,3 nicht notwendig sein wird, sie können sogar auf dem Hauptthread gemacht oder zwischengespeichert werden. In meinem Gerät (Qcom615, 2Gram) dauert es weniger als eine ms.

Sie müssen also mit Ihrem Netzwerk debuggen.

Behebe das Problem nacheinander:

  1. Verwendet Ihr Server HTTPS oder no-cacahe oder no-gzip? Ihre Daten protokollieren und dem Partner Ihres Servers mitteilen, sie können Ihnen einen Rat geben.
  2. probiere schneller lib für Konverter .
  3. Verbessern Sie den Code Ihrer Ansicht (z. B. void redraw / relayout, stornieren Sie einen Langzeitjob im Hauptthread).
Miao1007 29.02.2016 16:37
quelle