编程语言
首页 > 编程语言> > java – 带有部分唤醒锁的背景中重复线程的android服务

java – 带有部分唤醒锁的背景中重复线程的android服务

作者:互联网

我有一个运行在应用程序服务中的线程,该应用程序从之前使用webview登录的页面中读取数据.该线程工作正常.

现在我想定期重复这个帖子,比如说一分钟,即使手机处于睡眠/屏幕关​​闭状态.我知道我可能不得不用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,因为用户尚未登录.因此会抛出一个异常,它会停止整个计划的Task Executor.如果“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);

解决方法:

不要使用带有while sleep的显式线程来模拟计时器.这是丑陋和不必要的.有更优雅的方式可以自动安排每x个时间单位的任务,如ScheduledThreadPoolExecutor.

标签:java,android,multithreading,service,wakelock
来源: https://codeday.me/bug/20190625/1288419.html