Запускаю приложение, оно сразу в мейн активити запускает этот сервис, который проверяет на наличие новых планов. Первый раз проверка идет успешно, находит новый. Потом я добавляю через другое активити план, оно возвращает на мейн активити где в списке находит новый план, но сервис его не видит(выгружает как раньше, без новой записи), хотя тут в цикле гоняет проверку из beeper. Я уже всяко пробовал и все никак. Спасите :(
public class PlansCheckingService extends Service {
public static boolean isNewPlan = false;
private Looper serviceLooper;
private ServiceHandler serviceHandler;
private final class ServiceHandler extends Handler {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private final String selection = ScheduleContract.PlansEntry.COLUMN_NAME_END_DATE + " < "
+ Long.toString(System.currentTimeMillis()) + " AND "
+ ScheduleContract.PlansEntry.COLUMN_NAME_COMPLITED + " = "
+ ScheduleContract.PlansEntry.COMPLITED_STAGES_NOT_CHECKED;
private final String sortOrder = ScheduleContract.PlansEntry._ID + " DESC";
private int lastPlanId = 0;
private int newPlanId = 0;
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public synchronized void handleMessage(Message message) {
final Runnable beeper = new Runnable() {
@Override
public void run() {
ScheduleDbHelper helper = new ScheduleDbHelper(getApplicationContext());
SQLiteDatabase db = helper.getReadableDatabase();
Cursor lastFoundPlan;
Cursor newPlans;
// db.beginTransaction();
lastFoundPlan = db.query(
ScheduleContract.PlansEntry.TABLE_NAME,
null,
selection,
null,
null,
null,
sortOrder,
"1"
);
if (lastFoundPlan.getCount() > 0) {
lastFoundPlan.moveToFirst();
Log.v("App", "cursor more");
newPlanId = lastFoundPlan.getInt(
lastFoundPlan.getColumnIndex(ScheduleContract.PlansEntry._ID)
);
Log.v("lastplanid", lastPlanId + "");
Log.v("newplanid", newPlanId + "");
if (newPlanId > lastPlanId) {
newPlans = db.query(
ScheduleContract.PlansEntry.TABLE_NAME,
null,
selection,
null,
null,
null,
sortOrder
);
Intent localIntent = new Intent(ScheduleContract.PLANSCHECKING_BROADCAST_ACTION);
localIntent.putExtra("number", newPlans.getCount());
Log.v("App", "service new plan");
try {
sendBroadcast(localIntent);
} catch (Exception e) {
}
lastPlanId = newPlanId;
newPlans.close();
}
}
lastFoundPlan.close();
// db.endTransaction();
db.close();
helper.close();
}
};
final ScheduledFuture handler = scheduler.scheduleWithFixedDelay(beeper, 0, 5, TimeUnit.SECONDS);
}
}
@Override
public void onCreate() {
HandlerThread thread = new HandlerThread("ServiceStartArguments",
Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
serviceLooper = thread.getLooper();
serviceHandler = new ServiceHandler(serviceLooper);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v("APP", "Service start");
Message message = serviceHandler.obtainMessage();
message.arg1 = startId;
serviceHandler.sendMessage(message);
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Log.v("destroy", "destroy");
}
}