]> iEval git - fonbot.git/commitdiff
Prevent against future use-up-lots-of-mobile-data bugs
authorMarius Gavrilescu <marius@ieval.ro>
Sun, 4 Aug 2013 05:43:08 +0000 (08:43 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Sun, 4 Aug 2013 05:43:08 +0000 (08:43 +0300)
src/ro/ieval/fonbot/FonBotMainService.java

index 8e8d67a0c535806b89f0e37a6eed6d46503dfe47..421caa7e03dfbfc90ebbf2981889b7d4cfbb40cd 100644 (file)
@@ -19,6 +19,7 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.net.ConnectivityManager;
 import android.os.IBinder;
+import android.os.SystemClock;
 import android.preference.PreferenceManager;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.content.LocalBroadcastManager;
@@ -70,14 +71,25 @@ public final class FonBotMainService extends Service {
         * @author Marius Gavrilescu <marius@ieval.ro>
         */
        private final class LongPollRunnable implements Runnable{
+               /**
+                * Minimum time between two runs of the long polling service, in milliseconds
+                *
+                * This ensures the long polling service won't use up all your mobile data.
+                */
+               private static final int MIN_MILLIS_BETWEEN_RUNS = 10000;
+
                public void run(){
                        final ConnectivityManager man=(ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
                        final HttpCallExecutableRunnable runnable=new HttpCallExecutableRunnable("/get", null, FonBotMainService.this, new PollResultCallback(FonBotMainService.this), false);
 
                        Log.d("LongPollRunnable", "Long polling started");
+                       long lastRun = 0;
                        while(man.getActiveNetworkInfo() != null && man.getActiveNetworkInfo().isConnected())
                                try {
-                                       runnable.run();
+                                       if(lastRun + MIN_MILLIS_BETWEEN_RUNS > System.currentTimeMillis())
+                                               SystemClock.sleep(lastRun + MIN_MILLIS_BETWEEN_RUNS - System.currentTimeMillis());
+                                       else
+                                               runnable.run();
                                } catch (final Exception ex){
                                        ex.printStackTrace();
                                        break;
This page took 0.01785 seconds and 4 git commands to generate.