Вместо создания новой службы для широковещательного приемника вы можете напрямую создать класс вещательного приемника, который будет прослушивать системные трансляции, даже если приложение не работает. Создайте новый класс, который расширяет BroadcastReceiver
.
public class YourReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do your stuff
}
}
И зарегистрируйте его в манифесте.
Читайте об Manifest-declared receivers
здесь .
Выше решение не будет работать, здесь является причиной. Проблема в том, что ваша служба убивается, когда приложение убито, поэтому экземпляр вашего приемника удаляется из памяти. Здесь - это небольшой трюк, чтобы повторно запустить службу в фоновом режиме. Добавьте следующий код в свою службу.
@Override
public void onTaskRemoved(Intent rootIntent){
Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
restartServiceIntent.setPackage(getPackageName());
PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 1000,
restartServicePendingIntent);
super.onTaskRemoved(rootIntent);
}
Хотя это неправильный способ сделать это. Также в Android 26+ вы не сможете это сделать, и вы поедете на службу переднего плана . https://developer.android.com/about/versions/oreo/background
Вам нужно использовать Recycler View для динамических списков.
Здесь - ссылка на учебник для Recycler View
.