With the background restrictions introduced in Android Oreo, using alarm services is error prone and has a lot of drawbacks.
Background Jobs introduced in Android Lollipop would be a good alternative but they are not supported below Android 21.
So a combination of Alarm service , GCM network manager and Android Job Schedular should be used for scheduling.