2013-10-24 2 views
0

Я знаю, что есть много вопросов об этом, но каждый раз, когда проблема была вызвана тем, что они «насильно убивали» свое приложение через App Manager.Android GCM не получает уведомления, когда Служба была убита

Это не мое дело.

Я запускаю службу, которая должна обрабатывать уведомление GCM. Когда сервис работает, все работает отлично!

НО

Если я запускаю другой App действительно хотят оперативной памяти, скажем, что-то вроде игры, то Android убьёт мою службу (чтобы не перезапустить его позже, когда RAM больше не является проблемой).

Дело в том, что если я запустил указанную игру и отправлю во время игры (когда я уверен, что служба была убита устройством - глядя на запущенные процессы на Eclipse), это не получить любые сообщения ... До тех пор, пока я не остановлю игру, подождите 3-4 минуты (возможно, для GC), и только тогда (когда служба перезагружается) я получаю уведомления GCM.

Точка входа приложения заставляет меня думать, что служба перезагружена, поскольку использование ОЗУ было достаточно низким, чтобы запустить мой сервис, а не потому, что GCM получил уведомление.

Это нормальное поведение системы уведомлений GCM? Является ли их каким-либо способом запустить сервис, как только я получу уведомление GCM?

Вот что в манифесте:

<receiver 
     android:name="com.my.package.service.C2DMMessageReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> 

     <category android:name="com.my.package.service"/> 
    </intent-filter> 
</receiver> 

И вот весь класс C2DMMessageReceiver:

public class C2DMMessageReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) { 
      Log.d("C2DM", "#### GOT PUSH ####"); 
      Communication2.getInstance().reconnect(); 
     } 
    } 
} 
+0

Вы начинаете свой сервис как на первом плане? (основной вопрос) –

+0

Нет, я не думаю, что это было бы досадно для пользователя. – TheSquad

+0

Ну ... вот что. Нет обходного пути. Услуги предназначены для того, чтобы жить, если в памяти больше ничего важнее. Установка их как переднего плана (и добавление уведомления) - это способ сообщить пользователю (и андроиду), что эта служба должна оставаться активной как можно больше. По правде говоря, ваше приложение ДОЛЖНО получать GCM, даже если ваше приложение умирает (не то же самое, что Force Stop). –

ответ

0

Это по умолчанию по дизайну. Начиная с Android 3.1 и выше любого пользователя приложения удалены из задач или приложения менеджер обыкновение получать любые намерения транслируемые, основываясь на следующих условиях ....

https://developer.android.com/about/versions/android-3.1.html#launchcontrols

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