我想让后台服务每24小时向RecyclerView添加项目

问题描述 投票:0回答:1

我正在尝试每24小时(每天)使用此代码但无法正常工作的向RecyclerView添加项目的服务

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:不允许启动服务意图

java android android-studio service alarmmanager
1个回答
0
投票
后台服务不能再用于长时间运行的任务。请使用JobScheduler API或Workmanager获得所需的结果。请查看以下链接以获取详细信息。

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

© www.soinside.com 2019 - 2024. All rights reserved.