1. 如果Fragment自己有背景,可以尝试将Actvity的背景设置为null,可避免Overdraw
getActivity().getWindow().setBackgroundDrawable(null);
2. 一个Activity中新增一个Fragment时,可以尝试隐藏其它的Fragment再添加新的Fragment,可避免Overdraw
List<Fragment> childFragments = mManager.getFragments();
for (Fragment childFragment : childFragments) {
if (childFragment.isVisible()) {
transaction.hide(childFragment);
}
} // 隐藏其它Fragment
transaction.add(containId, plannerFragment, plannerFragment.getTransactionTag()); // 添加新的Fragment
这样可一定程度上避免一个像素的重复绘制。
3. 使用ViewStub进行View的动态加载
在开发的时候,我们可能会动态地根据条件来决定显示哪个View或某个布局。控制起来比较灵活。但是缺点是耗费资源,虽然初始化时把View的可见性设置为View.GONE,但是在Inflate布局的时候View仍然会被Inflate,也就是说会被实例化,会耗费内存等资源。可以尝试使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。初始化时,ViewStub不会加载,在需要将其设置为可见后,系统才会对ViewStub指定的视图进行实例化(懒加载,防止初始化时一次性加载过多的控件造成性能损耗)。
网友评论