Android tips tool 發現的效能問題

來源:互聯網
上載者:User

1.ObsoleteLayoutParam不起作用的標籤

Invalid layout param in a LinearLayout: layout_centerVertical

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 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.

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.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.