我正在使用Google Maps v2
Android
。
我需要在地图的标记上显示一些View
,所以我每16ms更新一次位置以保持60fps。
我遇到了该代码的问题:
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_EXPLICIT可以暂停我的应用程序大约100毫秒!
因为谷歌地图v2,我的方法是保持60fps无法实现:(
如果我评论该行,GC_EXPLICIT调用将消失。我认为谷歌地图v2中的问题,我检查了他们的.class文件,但我没有找到任何System.gc
的电话,所以可能是我错了......
如果您知道如何找到System.gc()
的来电,我也很高兴知道这一点,或者谷歌的人可以帮我解决这个问题?
P.S。在gmaps-api问题上询问此问题:https://code.google.com/p/gmaps-api-issues/issues/detail?id=6483&thanks=6483&ts=1394624273