我正在开发使用Google的GCM的Android应用。 除了有时需要花费大量时间来初始化GCM接收器(在Galaxy S3和OnePlus One上进行测试)之外,它的工作也相当不错。
我现在回顾了S3上的调试器并注意到GCM最终初始化其接收器之前的输出(GCM令牌在启动后立即加载完美)。
我已经花了几个小时来搜索它,我知道它与不同的API级别有关,但不应该是GCM的一些非常基本的东西?因为我也无法弄清楚如何通过代码直接解决这个问题,它似乎只是由Android本身修复,但提到的时间延迟超过30秒,所以它非常烦人,显然应该有更好的解决方案。
//编辑:抱歉忘记提及我正在使用的内容。 GCM实现几乎是来自here的快速入门示例 依赖性是
compile 'com.google.android.gms:play-services-gcm:8.3.0'
compile 'com.google.android.gms:play-services-location:8.3.0'
compile 'com.android.support:appcompat-v7:23.0.1'
和
minSdkVersion 15
targetSdkVersion 23
S3具有API级别版本18.
输出:
I / dalvikvm:找不到方法 android.content.Context.getSystemService,从方法引用 ----。GCMPushReceiverService.access $超
W / dalvikvm:VFY:无法解析虚拟方法707: Landroid /内容/上下文; .getSystemService (Ljava /郎/类;)Ljava /郎/对象;
D / dalvikvm:VFY:在0x0035处替换操作码0x6f
I / dalvikvm:找不到方法 android.content.Context.getColorStateList,从方法引用 ----。GCMPushReceiverService.access $超
W / dalvikvm:VFY:无法解析虚拟方法687: Landroid /内容/上下文; .getColorStateList (I)Landroid /内容/ RES / ColorStateList;
D / dalvikvm:VFY:在0x004f处替换操作码0x6f
I / dalvikvm:找不到方法 android.content.ContextWrapper.getCodeCacheDir,从方法引用 ----。GCMPushReceiverService.access $超
[...]
D / dalvikvm:VFY:将代码0x6f替换为0x0335
I / dalvikvm:DexOpt:非法方法访问(调用 Lcom / google / android / gms / gcm / GcmListenerService; .zzgU(I)Z from LCOM / ---- / GCMPushReceiverService)
I / dalvikvm:找不到方法 com.google.android.gms.gcm.GcmListenerService.zzgU,引用自 方法----。GCMPushReceiverService.access $ super
W / dalvikvm:VFY:无法解析虚方法35966: Lcom / google / android / gms / gcm / GcmListenerService; .zzgU(I)Z
D / dalvikvm:VFY:将代码0x6f替换为0x03a5
I / dalvikvm:找不到方法 android.content.ContextWrapper.getSystemServiceName,引用自 方法----。GCMPushReceiverService.access $ super
W / dalvikvm:VFY:无法解析虚方法787: Landroid /内容/ ContextWrapper; .getSystemServiceName (Ljava /郎/类;)Ljava /郎/字符串;
[...]
D / dalvikvm:GC_FOR_ALLOC释放678K,37%免费14563K / 22812K,暂停 28ms,总共28msI / dalvikvm-heap:将堆(frag case)增长到18.212MB(2995216字节) 分配
D / dalvikvm:GC_FOR_ALLOC释放3K,33%免费17484K / 25740K,暂停 26ms,总计26ms