Я хочу, чтобы Фоновая служба добавляла элемент в RecyclerView каждые 24 часа - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь запустить службу, которая добавляет элемент в RecyclerView каждые 24 часа (каждый день). Я использовал этот код, но он не работает:

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

Я пробовал это, но Служба работает один или два раза, а затем останавливается, а иногда выдает следующую ошибку :

java .lang.IllegalStateException: Запрещено запускать службу. Намерение

1 Ответ

0 голосов
/ 12 марта 2020

Фоновая служба не может использоваться для длительных задач с Android 8.0 и выше. Пожалуйста, используйте API JobScheduler или Workmanager для достижения желаемых результатов. Обратитесь к следующей ссылке для получения подробной информации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...