У меня проблема с приложением, которое я кодирую.
Мне нужно получать ACTION_SCREEN_ON, ACTION_SCREEN_OFF и ACTION_USER_PRESENT, каждый раз, когда они транслируются, поэтому мое приложение, конечно, остается в фоновом режиме. В настоящее время мое приложение создано активностью настроек и службой. ScreenReceiver - это BroadcastReceiver, который получает ACTION_SCREEN_ * намерения, а UnlockReceiver получает намерение ACTION_USER_PRESENT. Регистры обслуживания и Разрегистрирует приемники:Everlasting BroadcastReceiver
public class MainService extends Service {
ScreenReceiver screenReceiver = null;
UnlockReceiver unlockReceiver = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
doStart();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
doStart();
return START_STICKY;
}
public void doStart() {
if(screenReceiver != null && unlockReceiver != null)
return;
IntentFilter filter;
if(screenReceiver == null) {
filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
screenReceiver = new ScreenReceiver();
registerReceiver(screenReceiver, filter);
}
if(unlockReceiver == null) {
filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_PRESENT);
unlockReceiver = new UnlockReceiver();
registerReceiver(unlockReceiver, filter);
}
}
@Override
public void onDestroy() {
if(screenReceiver != null)
unregisterReceiver(screenReceiver);
if(unlockReceiver != null)
unregisterReceiver(unlockReceiver);
}
}
Но иногда Android убивает мою службу, чтобы освободить оперативную память, а затем перезапускает его. Время между убийством и респауном обычно составляет около 5 секунд, но иногда этого может быть достаточно, чтобы пропустить некоторые намерения, вызывающие проблемы для пользователей моего приложения. Эти намерения могут быть зарегистрированы только в регистре регистрации, поэтому я не могу зарегистрировать их в манифесте. Как я мог прислушиваться к этим намерениям, не будучи убитым или отсутствующим?
Спасибо!