当viewpager.setAdapter()
带有日志:
java.lang.OutOfMemoryError: Failed to allocate a 22409382 byte allocation with 10594550 free bytes and 10MB until OOM
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:125)
at java.lang.StringBuffer.append(StringBuffer.java:278)
at java.io.StringWriter.write(StringWriter.java:123)
at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358)
at com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303)
at com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625)
at com.android.internal.util.FastPrintWriter.append(FastPrintWriter.java:658)
at java.io.PrintWriter.append(PrintWriter.java:691)
at java.io.PrintWriter.append(PrintWriter.java:31)
at java.lang.Throwable.printStackTrace(Throwable.java:324)
at java.lang.Throwable.printStackTrace(Throwable.java:300)
at android.util.Log.getStackTraceString(Log.java:340)
at com.android.internal.os.RuntimeInit.Clog_e(RuntimeInit.java:59)
at com.android.internal.os.RuntimeInit.access$200(RuntimeInit.java:43)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:85)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
但是,我的Activity或Fragment中没有使用StringBuilder
或其他一些流输入和输出。
我试图让activty扩展FragmentActivity,但它没有用。
viewPager位于CoordinatorLayout
(我不认为因为MD而发生崩溃,但谁知道......)
有没有人遇到同样的问题或知道如何解决这个问题?
[更新]
现在我发现oom发生在我的BaseFragment onCreateView
return view;
上。
返回的视图是FrameLayout
,其中ImageView
,TextView
和布局由儿童定义。
loadingVu.initView(LayoutInflater.from(getActivity()), container);
vu.initView(LayoutInflater.from(getActivity()), null);
succeedView = vu.getView();
loadingVu.mRootView.addView(succeedView);
onBindVu();
View loadingVuView = loadingVu.getView();
return loadingVuView;
通过调试代码我发现我可以获得loadingVuView,但app在下一步崩溃了。
OOM最终在SourceCode FragmentManager moveToState
中发现:
case Fragment.CREATED:
//...
container.addView(f.mView);
//....
那么......为什么会发生这种情况以及如何解决?
我知道它是怎么发生的。
当我在Fragment中使用方法inflater.inflate(R.layout.XXX, container)
时,它应该返回一个FrameLayout但是返回ViewPager!
正如你所见,现在容器和f.mView是相同的View,然后是OOM。
实际上它是由膨胀(id,容器,假)修复的一个小问题......