Ich möchte alle 30 Sekunden einen Netzwerkanruf durchführen, um einige Messwerte zum Server zu übertragen. Momentan mache ich es mit thread.sleep(). Ich habe Artikel gefunden, die sagen, dass thread.sleep() einige Nachteile hat. Ich muss wissen, ob ich es richtig mache? oder Ersetzen den Thread mit Handler wird meinen Code verbessern?Thread.sleep() vs handler.postDelay(), um Netzwerkanruf alle 30 Sekunden auszuführen
public static void startSending(final Context con) {
if (running) return;
running = true;
threadToSendUXMetrics = new Thread(new Runnable() {
@Override
public void run() {
do {
try {
Thread.sleep(AugmedixConstants.glassLogsPushInterval);
} catch (InterruptedException e) {
mLogger.error(interrupt_exception + e.getMessage());
}
// to do to send each time, should have some sleep code
if (AugmedixConstants.WEBAPP_URL.equals(AugmedixConstants.EMPTY_STRING)||!StatsNetworkChecker.checkIsConnected(con)) {
Utility.populateNetworkStat();
mLogger.error(may_be_provider_not_login_yet);
} else
sendUXMetrics();
} while (running);
if (!uxMetricsQueue.isEmpty()) sendUXMetrics();
}
});
threadToSendUXMetrics.start();
}
Sie wollen Metriken senden, wenn App läuft oder weiter senden möchten, selbst App ist nicht im Vordergrund –
@AbdulWaheed, Meine App ist System Launcher App und es bleibt im Vordergrund. Das Senden bei laufender App funktioniert also auch für meinen Fall. –
Warum fokussierst du dann Thread? Ein Thread kann jederzeit vom Betriebssystem gelöscht werden. Warum versuchst du nicht den Android Service? –