Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android服务,后台重复线程,部分唤醒锁定_Java_Android_Multithreading_Service_Wakelock - Fatal编程技术网

Java android服务,后台重复线程,部分唤醒锁定

Java android服务,后台重复线程,部分唤醒锁定,java,android,multithreading,service,wakelock,Java,Android,Multithreading,Service,Wakelock,我在一个应用程序的服务中运行了一个线程,该应用程序从以前使用webview登录的页面中读取数据。那根线很好用 现在,我想周期性地重复这个线程,比如说一分钟,即使在手机处于睡眠/屏幕关闭状态时。我知道我可能不得不和威克洛克一起去做,但我不知道怎么做 我这里有三个问题。我试着用while(真的)sleep(60000)重复这个线程。。。。但当手机屏幕关闭后,线程就会停止。有更好的办法吗 然后我还要将字符串计数与零进行比较。这意味着如果字符串计数大于零,则执行xxx 非常感谢您的帮助 Thread d

我在一个应用程序的服务中运行了一个线程,该应用程序从以前使用webview登录的页面中读取数据。那根线很好用

现在,我想周期性地重复这个线程,比如说一分钟,即使在手机处于睡眠/屏幕关闭状态时。我知道我可能不得不和威克洛克一起去做,但我不知道怎么做

我这里有三个问题。我试着用while(真的)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”为空,是否有方法重新启动它


不要使用带有
while
+
sleep
的显式线程来模拟计时器。这既丑陋又没有必要。还有更优雅的方法可以每x时间单位自动安排任务,例如。

谢谢!!我该如何处理唤醒锁和字符串比较呢?@SunnySonic:你应该先试试看
ScheduledThreadPoolExecutor
是否和你以前的代码有同样的问题。谢谢你的提示。读了一点之后,我甚至可以在我的主要活动中创建它,并且不一定需要单独的服务。我会试试,然后回来。谢谢!我用了你的建议,但似乎效果很好,给我留下了另一个问题。请看我对第一篇文章的编辑。@SunnySonic:你为什么不检查字符串是否为空,在这种情况下什么也不做?
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);