簡體   English   中英

Android Traceview顯示活動需要2200毫秒來創建活動(onCreate到onResume),我如何確定原因?

[英]Android Traceview Shows Activity Takes 2200 msec to Create Activity (onCreate through to onResume), How do I Determine Why?

我在我的Android應用程序上運行了Traceview,結果非常糟糕:2200毫秒。 我和很多人聊過,並被告知要上下堆棧,找到有問題的代碼。 問題是,當我一直向上,或一直向下,沒有明顯的指示為什么(我知道你在嘲笑,因為你是對的,有一個理由,但請閱讀 - 在我是新的)。

如果我查看Excl CPU時間,BitmapFactory.nativeAssetDecode需要花費大量時間,超過1400毫秒。 顯然,這是我的活動問題的一個主要部分,然而,確定這來自哪里一直是一場噩夢。 我的“直接”代碼都沒有任何附近(不是Child,也不是Parent)堆棧的這一部分,事實上,我所有的“直接”方法似乎都表現得很好,只需0-4毫秒即可完成。會有所期待。

我發現的一件事是,如果我在setContentView()后啟動Traceview,則Traceview日志會下降到90毫秒。 老實說我太新了,無法理解這個結果,我知道這是誤導,因為當然setContentView()需要時間,但是我的布局可能導致太多時間被采取? 我的布局真的會造成2110毫秒嗎?

這是我很困惑的地方。 我的布局沒有過度繪制,看起來是一個結構良好且非冗余的XML文件。 我最大的布局有41個視圖小部件,我發誓我見過很多表現很好的活動,里面有超過100個視圖小部件。 我的視圖基本上是由4個Layouts和36個視圖小部件(TextViews等)設計的,每個項目都有一個從Style.xml分配給它們的Style。 我希望我沒有利用東西來創造怪物觀點?

也許如果有人可以擴展理論來追蹤問題,而不是由你編寫的直接代碼引起的,或者是為“失控”方法隔離CPU時間原因背后的理論,我就能更好地幫助自己(並且上帝知道我已經嘗試了,這整個周末實際上是這樣的。

TL; DR如果我在onCreate的setContentView()之后啟動我的Traceview,加載我的活動所需的時間比在setContentView()之前設置的時間少2110毫秒。 我的活動的觀點並不完全復雜,所以我很困惑。

瑞安,我非常感激

真正傷害你的一件事就是讓測量相互影響的布局。 我認為你在布局中使用了很多“權重”,因為計算時間有點時間。

您可以使用hierarchyviewer分析慢速布局。 這是在IntelliJ或Eclipse中的Android工具菜單中。 它僅在測試設備上運行,或者與已添加ViewServer的應用程序一起運行( 有關說明,請參閱此處)

一個注釋 - 綠色,黃色和紅色相對於當前視圖層次結構。 以下是文檔中的注釋:

這些指示符可以是紅色,黃色或綠色,表示每個視圖相對於樹中其他視圖的呈現方式。 它們本身並不是對壞觀點或良好觀點的嚴格表示。

 A red dot means that this view renders the slowest, compared to all views in your hierarchy. A yellow dot means that this view renders in the bottom 50% of all views in your hierarchy. A green dot means that this view renders in the top 50% of all views in your hierarchy. 

它只是表明你應該嘗試修復的東西。

好吧,我發現了問題而且它很苦。 這很好,因為它不是我的代碼或布局導致問題,是adob AdView使用loadAdOnCreate =“true”來創建廣告。 這很痛苦,因為如果我無法移除AdView創建的加載延遲,我現在可能不得不切換收入來源!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM