android java.lang.OutOfMemoryError调用GoogleMap.getCameraPosition

时间:2014-11-21 22:54:31

标签: android

我有一个应用程序在KitKat上运行得很好但是当我将手机升级到API21(Lollipop)时,我遇到了这个奇怪的失败。我认为这是一个谷歌bug,但想知道是否有其他人看过它并找到了解决方法?我正在执行以下简单的代码(我的类扩展了SupportMapFragment,fyi):

public CameraPosition getCurrentCameraPosition() {
    return mMap != null ? mMap.getCameraPosition() : null;
}

然而mMap.getCameraPosition()导致了这个例外:

11-21 16:39:34.844: E/art(12895): Throwing OutOfMemoryError "java.lang.String[] of length 1098697933 would overflow"
11-21 16:39:34.844: D/AndroidRuntime(12895): Shutting down VM
11-21 16:39:34.844: E/AndroidRuntime(12895): FATAL EXCEPTION: main
11-21 16:39:34.844: E/AndroidRuntime(12895): Process: com.SNIP.android.client, PID: 12895
11-21 16:39:34.844: E/AndroidRuntime(12895): java.lang.OutOfMemoryError: java.lang.String[] of length 1098697933 would overflow
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.Parcel.readStringArray(Parcel.java:1792)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.StrictMode$ViolationInfo.<init>(StrictMode.java:2200)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.StrictMode.readAndHandleBinderCallViolations(StrictMode.java:1738)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.Parcel.readExceptionCode(Parcel.java:1521)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.Parcel.readException(Parcel.java:1490)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.getCameraPosition(Unknown Source)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at com.google.android.gms.maps.GoogleMap.getCameraPosition(Unknown Source)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at com.SNIP.android.client.fragments.CLASS2.getCurrentCameraPosition(CLASS2.java:170)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at com.SNIP.android.client.fragments.CLASS1.onCreateView(CLASS1.java:684)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.Handler.handleCallback(Handler.java:739)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.Handler.dispatchMessage(Handler.java:95)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.os.Looper.loop(Looper.java:135)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at android.app.ActivityThread.main(ActivityThread.java:5221)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at java.lang.reflect.Method.invoke(Native Method)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at java.lang.reflect.Method.invoke(Method.java:372)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-21 16:39:34.844: E/AndroidRuntime(12895):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

如果你想知道为什么我使用成员变量引用GoogleMap而不是getMap() ....我在这里使用getMap()但升级后到Lollipop,它开始返回null(尽管它在GoogleMap中返回了正确的onCreateView)。

我现在猜测它正在返回null,因为它遇到了这个OutOfMemoryException,在catch块中捕获了它,并返回null

0 个答案:

没有答案