zo0r react notification android crash google-cloud-messaging runtimeexception

android - zo0r - react native ios background notification



Android GCM a veces se bloquea la aplicaciĆ³n porque com.google.android.gms.gcm.GcmListenerService se rechaza desde java.util.concurrent.ThreadPoolExecutor (1)

THREAD_POOL_EXECUTOR de THREAD_POOL_EXECUTOR tiene un límite codificado de 128 tareas en cola. Tu problema es que estás ejecutando muchas tareas con ese ejecutor.

Si no está llamando directamente a executeOnExecutor en cualquiera de sus AsyncTasks, el culpable más probable son los métodos de terceros que devuelven un ListenableFuture , especialmente aquellos que realizan operaciones de red. Probablemente querrá una forma de ejecutarlos en serie. Mover todas esas operaciones a AsyncTasks ejecutándose en AsyncTask.SERIAL_EXECUTOR sería una solución.

desde que actualicé GCM a 8.4.0, a veces mi aplicación falla y el registro muestra la siguiente excepción:

Fatal Exception: java.lang.RuntimeException: Unable to start service com.myapp.app.Service_GCMListenerService@ea3f6c7 with Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000010 pkg=com.myapp.app cmp=com.myapp.app/.Service_GCMListenerService (has extras) }: java.util.concurrent.RejectedExecutionException: Task com.google.android.gms.gcm.GcmListenerService$1@7b28d65 rejected from java.util.concurrent.ThreadPoolExecutor@f392a3a[Running, pool size = 9, active threads = 9, queued tasks = 128, completed tasks = 0] at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3027) at android.app.ActivityThread.-wrap17(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by java.util.concurrent.RejectedExecutionException: Task com.google.android.gms.gcm.GcmListenerService$1@7b28d65 rejected from java.util.concurrent.ThreadPoolExecutor@f392a3a[Running, pool size = 9, active threads = 9, queued tasks = 128, completed tasks = 0] at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2014) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:794) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1340) at com.google.android.gms.gcm.GcmListenerService.zzn(Unknown Source) at com.google.android.gms.gcm.GcmListenerService.onStartCommand(Unknown Source) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3010) at android.app.ActivityThread.-wrap17(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Este bloqueo no explica dónde está el error en mi código. ¿Que debería hacer?

Esta es mi implementación de GCM:

Manifiesto de Android :

<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.myapp.app" /> </intent-filter> </receiver> <service android:name=".Service_GCMListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> <service android:name=".Service_IDListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.android.gms.iid.InstanceID"/> </intent-filter> </service>

Service_GCMListenerService

public class Service_GCMListenerService extends GcmListenerService { @Override public void onDeletedMessages() { super.onDeletedMessages(); PushManager.checkForNewPush(); } @Override public void onMessageReceived(String from, Bundle data) { super.onMessageReceived(from, data); PushManager.processPush(this,false,data.getString("message")); } }

Service_IDListenerService

public class Service_IDListenerService extends InstanceIDListenerService { /** * Called if InstanceID token is updated. This may occur if the security of * the previous token had been compromised. This call is initiated by the * InstanceID provider. */ @Override public void onTokenRefresh() { GCMUtils.registerNewInstanceID(); }