4

以前にWebビューでログインしたページからデータを読み取るアプリのサービスで実行されているスレッドがあります。そのスレッドは正常に機能しています。

今、私はこのスレッドを定期的に繰り返したいと思います。たとえば、電話がスリープ状態/画面がオフのときでも、1分に1回です。私はおそらく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(); 

これが、以下のコードでの2回目の試行です。ユーザーがすでにログインしている場合は、完全に機能します。私の問題は、ユーザーがまだログインしていないため、アプリの起動時に文字列「count」がnullを返すことです。したがって、スケジュールされたタスクエグゼキュータ全体を停止する例外がスローされます。「count」がnullの場合に再起動する方法はありますか?

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);
4

1 に答える 1

4

タイマーをシミュレートするためにwhile+付きの明示的なスレッドを使用しないでください。sleepそれは醜くて不必要です。ScheduledThreadPoolExecutorのように、x時間単位ごとにタスクを自動的にスケジュールするより洗練された方法があります。

于 2012-09-20T17:32:06.917 に答える