zoukankan      html  css  js  c++  java
  • Android tips tool 发现的性能问题(转载翻译)

    先翻译刚好在研究到的一段,其余的无限期待续。

    1.ObsoleteLayoutParam不起作用的标签

    Invalid layout param in a LinearLayout: layout_centerVertical

    Invalid layout param in a ScrollView: layout_weight


    Issue: Looks for layout params that are not valid for the given parent layout
    Id: ObsoleteLayoutParam


    The given layout_param is not defined for the given layout, meaning it has no effect. This usually happens when you change the parent layout or move view code around without updating the layout params. This will cause useless attribute processing at runtime, and is misleading for others reading the layout so the parameter should be removed.

    2.HandlerLeak 非静态的内部类Handler

    This Handler class should be static or leaks might occur (com.borqs.appinstaller.AppMoveFragment.LoadAppHandler)


    Issue: Ensures that Handler classes do not hold on to a reference to an outer class
    Id: HandlerLeak


    In Android, Handler classes should be static or leaks might occur. Messages enqueued on the application thread's MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class.

    3.FloatMath 有时候Android有更好的API实现相比Java

    Use android.util.FloatMath#ceil() instead of java.lang.Math#ceil to avoid argument float to double conversion


    Issue: Suggests replacing java.lang.Math calls with android.util.FloatMath to avoid conversions
    Id: FloatMath


    On modern hardware, "double" is just as fast as "float" though of course it takes more memory. However, if you are using floats and you need to compute the sine, cosine or square root, then it is better to use the android.util.FloatMath class instead of java.lang.Math since you can call methods written to operate on floats, so you avoid conversions back and forth to double.


    http://developer.android.com/guide/practices/design/performance.html#avoidfloat

    4.InefficientWeight 

    Use a layout_width/layout_height of 0dip instead of wrap_content for better performance


    Issue: Looks for inefficient weight declarations in LinearLayouts
    Id: InefficientWeight


    When only a single widget in a LinearLayout defines a weight, it is more efficient to assign a width/height of 0dp to it since it will absorb all the remaining space anyway. With a declared width/height of 0dp it does not have to measure its own size first.

    当在一个LinearLayout布局中仅包含一个定义weight属性的view控件时,直接指定0dp到其width或height属性更高效,因为在初始化时不再需要测量这个view控件的尺寸,反正到最后它都会霸占所有剩余空间的了。

    * 注:weight属性仅应用于控件并排排列共用的空间方向,如vertical方向LinearLayout中子控件的height,此时对width无效。

    5.NestedWeights 

    Nested weights are bad for performance


    Issue: Looks for nested layout weights, which are costly
    Id: NestedWeights


    Layout weights require a widget to be measured twice. When a LinearLayout with non-zero weights is nested inside another LinearLayout with non-zero weights, then the number of measurements increase exponentially.

    6.UnusedResources 

    The resource R.drawable.ic_action_search appears to be unused


    Issue: Looks for unused resources
    Id: UnusedResources


    Unused resources make applications larger and slow down builds.

    7.DrawAllocation 避免在draw和layout的时候创建对象,频繁的调用,垃圾回收操作会影响一些UI的体验

    Avoid object allocations during draw/layout operations (preallocate and reuse instead)


    Issue: Looks for memory allocations within drawing code
    Id: DrawAllocation


    You should avoid allocating objects during a drawing or layout operation. These are called frequently, so a smooth UI can be interrupted by garbage collection pauses caused by the object allocations.


    The way this is generally handled is to allocate the needed objects up front and to reuse them for each drawing operation.


    Some methods allocate memory on your behalf (such as Bitmap.create), and these should be handled in the same way.

    8.UseCompoundDrawables

    This tag and its children can be replaced by one <TextView/> and a compound drawable


    Issue: Checks whether the current node can be replaced by a TextView using compound drawables.
    Id: UseCompoundDrawables


    A LinearLayout which contains an ImageView and a TextView can be more efficiently handled as a compound drawable.


    There's a lint quickfix to perform this conversion in the Eclipse plugin.

    9.MergeRootFrame

    This <FrameLayout> can be replaced with a <merge> tag


    Issue: Checks whether a root <FrameLayout> can be replaced with a <merge> tag
    Id: MergeRootFrame


    If a <FrameLayout> is the root of a layout and does not provide background or padding etc, it can often be replaced with a <merge> tag which is slightly more efficient. Note that this depends on context, so make sure you understand how the <merge> tag works before proceeding.


    http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html

    10.UselessParent 有些Layout可以省略

    This LinearLayout layout or its FrameLayout parent is useless


    Issue: Checks whether a parent layout can be removed.
    Id: UselessParent


    A layout with children that has no siblings, is not a scrollview or a root layout, and does not have a background, can be removed and have its children moved directly into the parent for a flatter and more efficient layout hierarchy.

    英文版转自:http://blog.csdn.net/time_hunter/article/details/8664665

  • 相关阅读:
    zjoj1706: [usaco2007 Nov]relays 奶牛接力跑
    bzoj1784: [Usaco2010 Jan]island
    [PKUSC2018]真实排名
    [PKUSC2018]主斗地
    回来了
    P4887 第十四分块(前体)
    P3604 美好的每一天
    Codeforces Round #660(CF1388)
    BOI2020 DAY2
    BZOJ 5281--[Usaco2018 Open]Talent Show(分数规划&单调队列&DP)
  • 原文地址:https://www.cnblogs.com/wavky/p/3421543.html
Copyright © 2011-2022 走看看