如何防止ViewPager泄漏RAM?

时间:2019-03-20 20:35:48

标签: android

我有一个简单的ViewPager和FragmentStatePagerAdapter处理7个片段。这些片段包含包含TextViews和ImageViews的LinearLayouts。 我的ViewPager设置为仅在屏幕外保留2个片段(viewPager.setOffscreenPageLimit(2);)。

观察到的结果:当我在片段之间水平滑动时,内存使用量(使用Android Profile观察到)不断增加。一旦达到.8GB,该应用将不再绘制ImageViews。< / p>

我对此感到很好奇,因此我将日志输出添加到OnCreate(),onCreateView(),OnAttach(),OnDetach(),OnDestroy(),并观察到它们每次滑动都被调用(如预期的那样)。当我退出活动时,RAM使用率会保持一段时间,然后在几分钟后开始下降。

我不知道为什么内存使用量会增加。这是片段代码:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    Log.e("ViewSchedule_Day", "OnAttach");
    if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.e("ViewSchedule_Day", "Oncreate");
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mDay = getArguments().getInt(ARG_DAY);
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    Log.e("ViewSchedule_Day", "OncreateView");
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_view_schedule__day, container, false);
    return view;
}

以上内容是否引起此问题?如果没有,那么哪里可以找到一个好地方?

编辑:我用空片段运行了一些测试(onCreateView只是使视图膨胀,如上面的代码所示),每次我在片段之间滑动时,内存仍在增加。

1 个答案:

答案 0 :(得分:0)

我认为您正在加载大图像(大尺寸)。所以检查一下。 这个链接也可能对您有帮助 Graphics performance