Skayred, Wierzę, że miałem dokładnie taką samą sytuację. Zauważyłem jednak, że kiedy telefon spał, a nowe działanie zostało wysłane do działania, nie uruchomiłoby ono aktywności, dopóki ekran nie był włączony (dla moich celów chciałem, żeby ekran był włączony).
Moim rozwiązaniem było nabycie wakeloku w moim odbiorniku C2DM.
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
mWakeLock.acquire();
Oczywiście, pamiętaj o zwolnieniu blokady za pomocą mWakeLock.release() w swojej aktywności.
To dziwne zachowanie, które nie wydaje się być zgodne z innymi zachowaniami związanymi z działaniem Androida. W moim przypadku używam działania singleTask (nie jestem pewien jakiego rodzaju aktywności używasz, którego nie określiłeś). Jeśli nie jest to przykład działalności na górze stosu, a telefon jest uśpiony moja działalność rozpocznie i mogę użyć następujących w onCreate():
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
Jednak jeżeli działalność jest górna część stosu i telefon śpi, aktywność nie jest uruchamiana, dopóki nie włączę ekranu. Mam nadzieję, że to działa dla ciebie. Jeśli nie potrzebujesz ekranu, chciałbym spróbować grać z innymi flagami dla wakelocka.
Nie zaleciłbym aktualizacji interfejsu użytkownika tylko w trybie onCreate, ale można również skorzystać z usługi onResume. Niemniej jednak uważam, że pytanie jest zbyt nieostre i nie jestem pewien, czy mamy wszystko, na co musimy odpowiedzieć. Podaj kod działania, główne metody. – Snicolas
Telefon jest zablokowany, a aktywność wydaje się być na pierwszym planie i nie jest ponownie uruchamiana, 'onResume',' onCreate' i 'onNewIntent' nie jest nazywane – skayred
Możesz rozważyć użycie usługi, być może z blokadą sieci, aby upewnić się, że nadal otrzymujesz c2dm powiadomienia. – Snicolas