package pl.llp.aircasting.storage; import pl.llp.aircasting.storage.db.AirCastingDB; import pl.llp.aircasting.storage.db.WritableDatabaseTask; import pl.llp.aircasting.util.Constants; import android.content.Intent; import android.os.IBinder; import android.util.Log; import com.google.inject.Inject; import roboguice.service.RoboService; import java.util.concurrent.atomic.AtomicBoolean; import static pl.llp.aircasting.sensor.BluetoothConnector.sleepFor; /** * Created by ags on 03/16/13 at 19:10 */ public class DatabaseWriterService extends RoboService { public static final int DELAY_MILLISECONDS = 200; @Inject AirCastingDB db; @Inject DatabaseTaskQueue taskService; final AtomicBoolean shouldRun = new AtomicBoolean(true); private Thread thread; @Inject public void init() { thread = new Thread(new Runnable() { @Override public void run() { while (shouldRun.get()) { if (taskService.somethingAvailable()) { unitOfAction(); } else { sleepFor(DELAY_MILLISECONDS); } } } }); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); if(thread.getState() == Thread.State.NEW) { thread.start(); } } void unitOfAction() { try { WritableDatabaseTask task = taskService.getFirst(); db.executeWritableTask(task); } catch (Exception e) { Log.e(Constants.TAG, "Something bad happened", e); } } @Override public IBinder onBind(Intent intent) { return null; } }