4
我有一個線程運行在一個應用程序的服務中,該應用程序從之前用webview登錄到的頁面讀取數據。該線程工作正常。Android服務與重複線程在部分喚醒鎖定的背景
現在我想重複這個線程週期性地說,一分鐘,甚至當手機睡着了/屏幕關閉。我知道我可能會用wake_lock去解決它,但我不知道如何。
我在這裏有3個問題。我嘗試用while(true)sleep(60000)...重複該線程,但在電話屏幕熄滅後停止線程。有沒有更好的辦法?
然後,我還想比較字符串數爲零。如果字符串計數大於零,則爲xxx。
任何幫助非常感謝!
Thread downloadThread = new Thread() {
public void run() {
Document doc;
doc = null;
try {
final String url = "https://xxx.xxx.xx";
// -- Android Cookie part here --
CookieSyncManager.getInstance().sync();
CookieManager cm = CookieManager.getInstance();
String cookie = cm.getCookie(url);
// Jsoup uses cookies as "name/value pairs"
doc = Jsoup.connect("https://xxx.xxx.xx").cookie(url, cookie).get();
Elements elements = doc.select("span.tabCount");
String count = elements.first().text();
Log.d(TAG, "wart"+(count));
Log.d(TAG, "wartcookiedate:"+(cookie));
} catch (IOException e) {
e.printStackTrace();
}
}
};
downloadThread.start();
這是我第二次嘗試下面的代碼。當用戶已經登錄時,它可以完美工作。我現在的問題是,在應用程序啓動時,字符串「count」將返回null,因爲用戶尚未登錄。因此將拋出一個異常,它會停止整個計劃的任務執行程序。如果「count」爲空,是否有辦法重新啓動它?
scheduleTaskExecutor= Executors.newScheduledThreadPool(5);
// This schedule a task to run every 10 seconds:
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
Document doc;
doc = null;
try {
final String url = "https://xxx.xxx.xx";
// -- Android Cookie part here --
CookieSyncManager.getInstance().sync();
CookieManager cm = CookieManager.getInstance();
String cookie = cm.getCookie(url); // returns cookie for url
// Jsoup uses cookies as "name/value pairs"
doc = Jsoup.connect("https://xxx.xxx.xx").cookie(url, cookie).get();
Elements elements = doc.select("span.tabCount");
String count = elements.first().text();
Log.d(TAG, "wart"+(count));
Log.d(TAG, "wartcookiedate:"+(cookie));
} catch (IOException e) {
e.printStackTrace();
}
}
}, 0, 10, TimeUnit.SECONDS);
謝謝!我怎麼能去wake_lock和字符串比較呢? – SunnySonic
@SunnySonic:你應該先嚐試一下,看看'ScheduledThreadPoolExecutor'是否與你之前的代碼有相同的問題。 – Tudor
感謝您的提示。閱讀完一下後,即使是在我的主要活動中,我也可以創建它,並不一定需要爲此提供單獨的服務。會嘗試一下,然後回到這裏。非常感謝! – SunnySonic