Quiero hacer servicio en segundo plano para añadir el artículo a RecyclerView cada 24 horas

Micheal_ Moris:

Estoy tratando de iniciar un servicio que añade un elemento a RecyclerView cada 24 horas (todos los días). He utilizado este código, pero no funciona:

BackgroundService.java

public class BackgroundService extends Service {
private boolean isRunning;
private Context context;
private Thread backgroundThread;
SharedPreferences pref;
String isMorningChecked;
String isEveningChecked;
String isNightChecked;
String isEchuraistChecked;
String isConfessChecked;
String isBibleChecked;
String Date;
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    this.context = this;
    this.isRunning = false;
    this.backgroundThread = new Thread(addNewNote);
}


private Runnable addNewNote = new Runnable() {
    @Override
    public void run() {
        Log.e("isRunning", "Yeeeeeeeeeees!");
        pref = getApplicationContext().getSharedPreferences("checkStates", 0);
        String checkMorningState = pref.getString("morning", "False");
        String checkEveningState = pref.getString("evening", "False");
        String checkNightState = pref.getString("night", "False");
        String checkEchuraistState = pref.getString("echuraist", "False");
        String checkConfessState = pref.getString("confess", "False");
        String checkBibleState = pref.getString("bible", "False");
        String writeYourNotes = pref.getString("writeNotes", "");
        SimpleDateFormat sdf = new SimpleDateFormat("E", new Locale("ar"));
        final SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd");
        final Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        Date = sdf2.format(timestamp).toString();
        if(checkMorningState.equals("True")){

            isMorningChecked = "+";

        }else{

            isMorningChecked = "-";

        }
        if(checkEveningState.equals("True")){

            isEveningChecked = "+";

        }else{

            isEveningChecked = "-";

        }
        if(checkNightState.equals("True")){

            isNightChecked = "+";

        }else{

            isNightChecked = "-";

        }
        if(checkEchuraistState.equals("True")){

            isEchuraistChecked = "+";

        }else{

            isEchuraistChecked = "-";

        }
        if(checkConfessState.equals("True")){

            isConfessChecked = "+";

        }else{

            isConfessChecked = "-";

        }
        if(checkBibleState.equals("True")){

            isBibleChecked = "+";

        }else{

            isBibleChecked = "-";
        }

        AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "Note").allowMainThreadQueries().build();
        db.userDao().insertAll(new Note(sdf.format(timestamp), sdf2.format(timestamp).toString(), isMorningChecked, isEveningChecked, isNightChecked, isEchuraistChecked, isConfessChecked, isBibleChecked, writeYourNotes));

        stopSelf();
    }
};


@Override
public void onDestroy() {
    super.onDestroy();
    this.isRunning = false;

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    if(!this.isRunning){

        this.isRunning = true;
        this.backgroundThread.start();

    }

    return START_STICKY;

}
}

BoardCastReceiver.java

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
        context.startService(new Intent(context, BackgroundService.class));
}
}

Home.java

Intent alarm = new Intent(this, AlarmReceiver.class);
    boolean alarmRunning = ((PendingIntent.getBroadcast(this,0,alarm,PendingIntent.FLAG_NO_CREATE)) != null);
    if(alarmRunning == false){

        PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,alarm,0);
        AlarmManager  alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 1000, pendingIntent);

He intentado esto, pero el servicio funciona una vez o dos veces y luego se detiene y, a veces me da el siguiente error:

java.lang.IllegalStateException: no se les permite empezar Intención de servicios

Usman la Victoria:

servicio en segundo plano no se puede utilizar para tareas de larga ejecución en Android 8.0 en adelante. Por favor, use JobScheduler API o WorkManager para lograr los resultados deseados. Consulte el siguiente enlace para más detalles.

https://developer.android.com/topic/libraries/architecture/workmanager

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=277437&siteId=1
Recomendado
Clasificación