在Android 4.4.2升级后暂停GC错误

Aja*_*jay 45 android garbage-collection

最近我的Galaxy Note 2升级到4.4.2版本.我正在使用这款手机进行开发(使用ADT)并且生活很好,但发布此升级"暂停GC"错误即将开始,我无法解决.每次我的ADT工具LogCat中的UI屏幕更改状态都会出现.下面是错误的转储.

在此先感谢您的帮助.

05-13 22:39:22.538: W/dalvikvm(8350): No implementation found for native Ldalvik/system/VMRuntime;.pauseGc:(Ljava/lang/String;)I
05-13 22:39:22.543: E/MyThread(8350): Pause GC
05-13 22:39:22.543: E/MyThread(8350): java.lang.reflect.InvocationTargetException
05-13 22:39:22.543: E/MyThread(8350):   at java.lang.reflect.Method.invokeNative(Native Method)
05-13 22:39:22.543: E/MyThread(8350):   at java.lang.reflect.Method.invoke(Method.java:515)
05-13 22:39:22.543: E/MyThread(8350):   at android.app.MyThread.pauseGC(MyThread.java:5525)
05-13 22:39:22.543: E/MyThread(8350):   at android.app.MyThread.performLaunchActivity(MyThread.java:2324)
05-13 22:39:22.543: E/MyThread(8350):   at android.app.MyThread.handleLaunchActivity(MyThread.java:2471)
05-13 22:39:22.543: E/MyThread(8350):   at android.app.MyThread.access$900(MyThread.java:175)
05-13 22:39:22.543: E/MyThread(8350):   at android.app.MyThread$H.handleMessage(MyThread.java:1308)
05-13 22:39:22.543: E/MyThread(8350):   at android.os.Handler.dispatchMessage(Handler.java:102)
05-13 22:39:22.543: E/MyThread(8350):   at android.os.Looper.loop(Looper.java:146)
05-13 22:39:22.543: E/MyThread(8350):   at android.app.MyThread.main(MyThread.java:5602)
05-13 22:39:22.543: E/MyThread(8350):   at java.lang.reflect.Method.invokeNative(Native Method)
05-13 22:39:22.543: E/MyThread(8350):   at java.lang.reflect.Method.invoke(Method.java:515)
05-13 22:39:22.543: E/MyThread(8350):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
05-13 22:39:22.543: E/MyThread(8350):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
05-13 22:39:22.543: E/MyThread(8350):   at dalvik.system.NativeStart.main(Native Method)
05-13 22:39:22.543: E/MyThread(8350): Caused by: java.lang.UnsatisfiedLinkError: Native method not found: dalvik.system.VMRuntime.pauseGc:(Ljava/lang/String;)I
05-13 22:39:22.543: E/MyThread(8350):   at dalvik.system.VMRuntime.pauseGc(Native Method)
05-13 22:39:22.543: E/MyThread(8350):   ... 15 more
Run Code Online (Sandbox Code Playgroud)

更新:我已在code.android.com(http://code.google.com/p/android/issues/detail?id=71073)发起了此问题.根据它们的三星bug,所以我现在向三星论坛提出了这个问题.

Oli*_*ler 5

在我的Note 2(GT-N7100),Android 4.4.2上看到这个问题一段时间后,我想让我的上述评论成为正确的答案.

在三星Galaxy Note 2上跟踪分配

按分配大小排序:

按分配大小排序

我使用webrtc来跟踪Android相机的分配情况,可以清楚地看到每次调用相机并在新的Activity中将视频渲染到GLSurfaceView上时,剩余的垃圾超过2 MB,这是从来没有被GC收集过.

为了比较,这里是华硕Memo Pad 2,Android 4.2.2上跟踪的相同分配:

在Asus Memo Pad 2上跟踪分配

按分配大小排序:

按分配大小排序

换句话说,在注2中,您可以在内存已满且设备崩溃之前启动视频实时视图大约20-30次.

换句话说:三星在去年更新了这个问题并且还没有修复它,它们也没有做出任何反应.三星是否想让我们购买新设备?看起来像那样.

-

这是我在2014-12-11的原始评论:

它确实会带来麻烦.它导致设备占用的内存远远超过需要和崩溃.我们正在开发一个包含许多图像和视频的应用程序,由于缺少GC,可能会使Android达到64MB限制(注2)并崩溃,而在其他设备上,内存消耗要低得多,内存总是在使用后释放.例如,具有相同分辨率的华硕Memo Pad消耗大约12MB,而Samsung Note 2需要24MB.但是,三星设备要快得多,可能是因为省略了GC.


Beh*_*ehr 1

我和你有同样的问题。我正在使用 ACRA,它正在吞噬崩溃,并且只在 logcat 中显示这一点。

该错误实际上已返回到服务器,并且我能够正确调试。调试时可能禁用 ACRA,您将看到正确的错误。

  • 这与问题的**原因**无关,因此在任何实际意义上都不是答案。您基本上观察到的是,如果您碰巧使用 ACRA,它可能会“隐藏”此消息(尽管这有点令人惊讶)。然而,**非常怀疑它是否会*导致*它。**真正的问题是某些 Android 供应商版本中的错误,高级代码习惯于刺穿抽象面纱来踢内部的某些东西,然后内部结构发生了变化,因此盲目到达水流后面的目标不再存在。 (2认同)