【发布时间】:2012-09-20 17:29:52
【问题描述】:
我有一个线程在应用程序的服务中运行,该线程从以前使用 web 视图登录的页面中读取数据。该线程工作正常。
现在我想定期重复这个话题,比如一分钟,即使手机处于睡眠状态/屏幕关闭时也是如此。我知道我可能不得不使用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);
【问题讨论】:
标签: java android multithreading service wakelock