gpt4 book ai didi

Android GCM 有时应用程序崩溃,因为 com.google.android.gms.gcm.GcmListenerService 被 java.util.concurrent.ThreadPoolExecutor 拒绝

转载 作者:行者123 更新时间:2023-11-30 01:19:48 26 4
gpt4 key购买 nike

自从我将 GCM 升级到 8.4.0 后,我的应用有时会崩溃并且日志显示以下异常:

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)

这次崩溃并没有解释我的代码中的错误在哪里。我该怎么办?

这是我对 GCM 的实现:

Android list :

<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();
}

最佳答案

AsyncTask 的 THREAD_POOL_EXECUTOR 有 128 个任务排队的硬编码限制。您的问题是您正在该执行程序上执行大量任务。

如果您没有在任何 AsyncTask 上直接调用 executeOnExecutor,最有可能的罪魁祸首是返回 ListenableFuture 的第三方方法,尤其是那些执行网络操作的方法。您可能需要一种方法来串行执行这些操作。将所有这些操作移动到在 AsyncTask.SERIAL_EXECUTOR 上执行的 AsyncTasks 中是一种解决方案。

关于Android GCM 有时应用程序崩溃,因为 com.google.android.gms.gcm.GcmListenerService 被 java.util.concurrent.ThreadPoolExecutor 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com