Android Google Maps v2显式调用System.gc()?或者如何找到对System.gc()的调用?

Android Google Maps v2显式调用System.gc()?或者如何找到对System.gc()的调用?,android,garbage-collection,google-maps-android-api-2,Android,Garbage Collection,Google Maps Android Api 2,我正在为Android使用googlemapsv2 我需要在地图的标记上显示一些视图,所以我每16毫秒更新一次它的位置,以保持60帧/秒 我对代码有个问题: Point targetPosition = getMap().getProjection() .toScreenLocation(mTrackingMarkerPos); 因为它似乎会显式地调用System.gc()或Runtime.getRuntime().gc() 所以我在日志输出中得到了这个: 03-12 15:00:24

我正在为
Android
使用
googlemapsv2

我需要在地图的标记上显示一些
视图
,所以我每16毫秒更新一次它的位置,以保持60帧/秒

我对代码有个问题:

Point targetPosition = getMap().getProjection()
    .toScreenLocation(mTrackingMarkerPos);
因为它似乎会显式地调用
System.gc()
Runtime.getRuntime().gc()

所以我在日志输出中得到了这个:

03-12 15:00:24.362  19135-19135/my_fake_package_name D/dalvikvm﹕ GC_EXPLICIT freed 122K, 10% free 12710K/14116K, paused 11ms+11ms, total 115ms
03-12 15:00:25.583  19135-19135/my_fake_package_name D/dalvikvm﹕ GC_EXPLICIT freed 123K, 10% free 12711K/14116K, paused 7ms+4ms, total 100ms
03-12 15:00:26.845  19135-19135/my_fake_package_name D/dalvikvm﹕ GC_EXPLICIT freed 123K, 10% free 12711K/14116K, paused 11ms+6ms, total 104ms
03-12 15:00:28.056  19135-19135/my_fake_package_name D/dalvikvm﹕ GC_EXPLICIT freed 217K, 10% free 12710K/14116K, paused 11ms+5ms, total 98ms
03-12 15:00:29.287  19135-19135/my_fake_package_name D/dalvikvm﹕ GC_EXPLICIT freed 121K, 10% free 12712K/14116K, paused 11ms+7ms, total 112ms
03-12 15:00:30.499  19135-19135/my_fake_package_name D/dalvikvm﹕ GC_EXPLICIT freed 123K, 10% free 12712K/14116K, paused 7ms+4ms, total 87ms
03-12 15:00:31.760  19135-19135/my_fake_package_name D/dalvikvm﹕ GC_EXPLICIT freed 126K, 10% free 12711K/14116K, paused 7ms+4ms, total 130ms
如您所见,GC\u EXPLICIT可以暂停我的应用程序约100毫秒

因此,由于Google Maps v2,我保持60帧/秒的方法无法实现:(

如果我对该行进行注释,GC_显式调用将消失。我认为Google Maps v2中存在这个问题,我检查了他们的.class文件,但没有找到任何对
System.GC
的调用,所以可能是我错了


如果你知道如何找到对
System.gc()
的调用,我也很乐意知道,或者谷歌的人可以帮我解决这个问题


p.S.在gmaps api问题上问了这个问题:

“如果你知道如何找到对System.gc()的调用”-在谷歌找份工作,加入地图团队,看看他们的代码。Play Services SDK是封闭源代码。“谷歌的人可以帮我解决这个问题吗?”--什么问题?您无法更改Play Services SDK代码。您无法假设调用第三方API需要多长时间。特别是,许多Maps V2 API调用都涉及到到到Play Services应用程序的IPC。我将重点放在尽量避免每帧调用此函数,但仅当坐标不同时(例如,在相机更改时)才调用此函数@commonware哈哈,非常有趣:)但我不能避免将其称为每帧,我已经优化了每帧中的每一条指令可运行:存储最后位置、最小堆分配等,但GMaps生成的GC_显式。。。顺便说一句:OnCameraChange调用频率太低,无法在标记附近绘制自定义信息窗口“顺便说一句:OnCameraChange调用频率太低,无法在标记附近绘制自定义信息窗口”--您没有绘制自定义信息窗口。相反,您选择了“在地图的标记上显示一些视图”。也许正确的答案是使用自定义信息窗口,在这种情况下,Maps V2的任务是将信息窗口保持在相对于标记的相同位置。我检查了每16毫秒运行一次的代码,在我的nexus4上运行需要0-2毫秒,所以我认为我不能再优化它了。@GMAPSV2中的Commonware自定义信息窗口被绘制为位图。我需要正常的动态视图,所以我渲染我自己的,我尝试有效地这样做