2012-06-10 7 views
1

У меня проблема с приложением, которое я кодирую.
Мне нужно получать 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 секунд, но иногда этого может быть достаточно, чтобы пропустить некоторые намерения, вызывающие проблемы для пользователей моего приложения. Эти намерения могут быть зарегистрированы только в регистре регистрации, поэтому я не могу зарегистрировать их в манифесте. Как я мог прислушиваться к этим намерениям, не будучи убитым или отсутствующим?

Спасибо!

ответ

0

Как я мог слушать эти намерения, не будучи убитыми или пропавшими без вести?

У вас нет. Вы переписываете свое приложение, чтобы либо не использовать эти трансляции, либо быть более устойчивыми в случае отсутствия трансляций. В конце концов, это не просто «Android убивает мой сервис, чтобы освободить оперативную память, а затем перезапустил его», но диспетчеры задач и тому подобное могут избавиться от вашего сервиса.

Смежные вопросы