Android: GETing the stream URL using Retrofit behind a DAO interface. Using CacheObjectDAO to cache the StreamSchedule object to SharedPreferences. AsyncTasks inheriting CacheAwareAsyncTask must implement onExpiredCache which will be called when the object in the cache has expired. The AudioPlayerService keeps a reference of the last set StreamSchedule and Podcast objects, so it can switch between those by itself. A listener listens for changes in the data source type. Added an isReady() method to BaseFragment, which will return true after the fragment view has been created.