如何提高片段显示效率?如何跟踪瓶颈的地方?

时间:2017-09-18 07:45:34

标签: android

我设计了一个用于餐厅菜单的应用程序,在Pad上运行。 UI是2部分,左边是类别面板。单击一个类别,右侧区域将显示一个片段。

我觉得碎片开关太慢了。我原以为是FragmentManager的替换动作,但是在这里跟踪之后,替换代码的成本大约是3毫秒。所以这不是显示瓶颈。代码是

FragmentManager fragMgr = MainActivity.getInstance().getSupportFragmentManager();
FragmentTransaction trans = fragMgr.beginTransaction();
trans.replace(R.id.dishdisplayarea_layout, frag);
trans.commit();

为了提高片段的显示速度,我在MainActivity的onCreate方法中构建了片段实例,并将它们存储在地图中。每次我需要显示一个,我只是从地图上得到它,所以我认为时间浪费在构建片段的视图上。

//get fragment object from map
DishDisplayFragment frag = MainActivity.getInstance().getMapDishDisplayFragments().get(category2Id);


//the fragment's onCreateView function, just return an exist view object
public class DishDisplayFragment extends Fragment {
    private View view;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return view;
    }
    ......
}

在每个片段中,有大约30个我自己的组件,我命名为DishComponent,一个DishComponent,包括9个布局,6个ImageView,2个TextView和一个按钮。由于DishComponent布局XML文件的代码太多,我只需在此处附加它的快照。 DishComponent structure 我不知道片段中是否有太多组件,然后使片段替换动作非常慢。我的设备是Samsung Tab E,配备1.5G内存和1.3GHz四核CPU。我跟踪应用程序的内存,它少了30M,与设备1.5G内存相比,应用程序在内存上的消耗并不大。所以我怀疑瓶颈是CPU。另一个证据是,当我在计算机上的Android虚拟设备中运行此应用程序时,操作非常顺利,显然,计算机的CPU比pad的功能更强大。

我在Pad上也跟踪了CPU时间。我发现大部分时间都用于Handler and Choreographer和ViewRootImpl。实际上,我不知道android的框架。我不知道这些信息是否有助于改善我的应用程序。我在这附上它希望它有用。 the CPU time for a replace operation of fragment 然后跟踪CPU图,我发现CPU只使用30%。这是否意味着只有一个核心适用于我的应用程序而其他核心闲置?如果是这样,如何设计使所有核心协同工作?

我还认为我的打击垫的硬件水平太低了。我使用Antutu,一个测量手机/打击垫运行速度的应用程序。我的垫只有18000,但iPhone7可以在Antutu获得150000分。硬件也是主要原因吗?

现在,我在这里列出我的问题

  • 如何定位导致片段替换动作的位置变慢?

  • 当应用需要更多计算时,如何使用2个核心?

  • 如何设计更优化的布局以使android快速运行/显示?

  • 如果原因来自硬件,还有其他技能可以快速替换片段吗?

0 个答案:

没有答案