ViewPager OOM设置适配器

时间:2015-12-11 01:29:16

标签: android android-fragments android-viewpager out-of-memory

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,其中ImageViewTextView和布局由儿童定义。

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,容器,假)修复的一个小问题......

0 个答案:

没有答案