Mag*_*cky 15 performance android android-layout android-view
我正在开展一个项目,当用户第一次打开应用程序时,需要通过简单的教程查看.我正试图以"正确的方式"做到这一点,我对性能问题感到疑惑.
目前,我在我的布局中有一个视图设置为android:visibility="GONE",我VISIBLE根据SharedPreference 更改为.这允许我让用户了解应用程序在首次启动时的工作方式.
我想知道的是当我的片段中呈现视图时它意味着什么.我的猜测是,即使将其可见性设置为,该视图也将无用地膨胀GONE.
现在,我正在考虑另一种选择:如果我只在第一次启动时添加我的视图,但在编程方面,在我的片段中添加我的视图onCreateView.这应该允许视图在以后的启动时不被夸大,但不会以编程方式膨胀视图意味着首次启动时性能不佳?
所以,为了回答我自己的问题,我使用DDMS工具TraceView来监控来自我的片段的调用onAttach直到它onResume.它让我看看哪个实现效率较低.
为了进行测试,我有一个简单RelativeLayout的FrameLayout内部(一直显示).我使用自定义布局每次添加,无论是以编程方式还是在我的布局文件中具有GONE的可见性.自定义布局由具有4个子项的RelativeLayout(ImageView,TextView,View和Button)组成.
我onCreateView是以下,允许应用程序基于两个static final boolean常量膨胀正确的布局来更改布局.
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
LinearLayout root;
if(INFLATE_PROGRAMMATICALY) {
root = (LinearLayout) inflater.inflate(R.layout.fragment_test_prgmcly, container, false);
if(SHOULD_FYI_VIEW_BE_SHOWN) {
View tutoView = inflater.inflate(R.layout.inner_view, root, false);
root.addView(tutoView);
}
} else {
root = (LinearLayout) inflater.inflate(R.layout.fragment_test_gone,container,false);
if(SHOULD_FYI_VIEW_BE_SHOWN) {
View tutoView = root.findViewById(R.id.RL_inner_view);
tutoView.setVisibility(View.VISIBLE);
}
}
return root;
}
Run Code Online (Sandbox Code Playgroud)
这导致以下结果:
膨胀时的可选布局
SHOULD_FYI_VIEW_BE_SHOWN=true
由TraceView给出的最大"实时估计"是75ms时,有刚刚从更改视图GONE来VISIBLE,但110毫秒时,我们需要实例化inner_view.
当可选布局未膨胀时
SHOULD_FYI_VIEW_BE_SHOWN=false
在这种情况下,通过TraceView给出的最大实时估计是102ms用于的膨胀GONE视图,与39MS当充气时,视图不具有GONE图.
因此,为了在不需要夸大视图时获得性能提升,我会说最好的解决方案是以编程方式扩展您的视图,如果您只需要显示一些时间.
您可以在Gist上找到测试项目
| 归档时间: |
|
| 查看次数: |
3121 次 |
| 最近记录: |