我希望每30秒執行一次網絡呼叫以將一些指標推送到服務器。目前我正在使用thread.sleep()。我發現一些文章說thread.sleep()有一些缺點。我需要知道我做對了嗎?或用Handler替換線程會改善我的代碼?Thread.sleep()vs handler.postDelay()每30秒執行一次網絡呼叫
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();
}
你想,如果應用程序正在運行發送metrices或想繼續發送,即使應用程序是不是在前臺 –
@AbdulWaheed,我的應用程序是系統啓動的應用程序,它仍然對前景。所以,當應用程序運行時發送也適用於我的情況。 –
爲什麼你聚焦線程呢?一個線程可以被操作系統隨時殺死。你爲什麼不嘗試Android服務。 –