自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android 中的“后臺無效動畫“行為分析

移動開發(fā) Android
下面我們就以兩個實例,從技術(shù)的角度來看一下事件發(fā)生時候的情況和原因,希望看到這篇文章的開發(fā)者,檢查一下自己的應(yīng)用是否有這個問題,有則改之,無則恭喜

當(dāng)一個 Android App 退到后臺之后,只要他沒有被殺死,那么他做什么事情大家都不要奇怪,因為這就是 Android。但是當(dāng)用戶知道一個你一個 App 退到后臺之后還在持續(xù)做無效的動畫,而這個動畫完全是無意義的,而且用戶還不知道他在做動畫,消耗用戶那可憐的電量的時候,輕則被多任務(wù)殺掉,禁止后臺運行,重則直接卸載。

一般的開發(fā)者很難發(fā)現(xiàn)這個問題,但是如果你經(jīng)常使用 Systrace ,多開幾十個應(yīng)用然后退回到桌面,左右滑動抓取 Systrace ,就可以很容易發(fā)現(xiàn),總有那么幾個后臺的應(yīng)用,還在頻繁地做無效的動畫。

這里說的后臺做動畫,指的是由于某種原因,應(yīng)用在退到后臺之后,用戶看不到任何這個 App 界面的時候,他仍然在后臺不斷地更新,耗費 CPU。引起這個問題的原因可能有好多個,畢竟 往 Choreographer 扔 CALLBACK_ANIMATION 的地方太多了,而且每個應(yīng)用可能都不一樣,但最終還是需要各個應(yīng)用去做修復(fù)

下面我們就以兩個實例,從技術(shù)的角度來看一下事件發(fā)生時候的情況和原因,希望看到這篇文章的開發(fā)者,檢查一下自己的應(yīng)用是否有這個問題,有則改之,無則恭喜

實例 - 網(wǎng)易新聞

我們在使用網(wǎng)易新聞后,將網(wǎng)易新聞退到后臺,然后左右滑動桌面,抓 Systrace 來看:

網(wǎng)易新聞到后臺之后還在持續(xù)做 Animation 的回調(diào)(紅框內(nèi)),每一幀都還是在 doFrame 操作

Android 中的“后臺無效動畫“行為分析

放大每一個 doFrame 來看,Choreographer 中的 input 和 traversal 都沒有觸發(fā),只有 animation 的回調(diào)一直在執(zhí)行

Android 中的“后臺無效動畫“行為分析

我們把這份 Trace 上的 cpu 部分全選,然后下面按照 Wall Duration 排序,可以發(fā)現(xiàn)網(wǎng)易新聞后臺動畫執(zhí)行時間最長。應(yīng)用已經(jīng)在后臺且不可見的時候,還在這么頻繁地工作,占用 CPU 資源,消耗電量,實在是不應(yīng)該

Android 中的“后臺無效動畫“行為分析

抓對應(yīng)的 MethodTrace 來看,就是在做動畫,沒有進行關(guān)閉 ,動畫依舊在每一幀進行 onAnimationUpdate 的回調(diào) ,可以看到這里是因為使用了 Airbnb 的 Lottie 庫導(dǎo)致的,動畫沒有關(guān)閉,所以還是一直在做觸發(fā)

Android 中的“后臺無效動畫“行為分析

實例 - QQ音樂

啟動 QQ 音樂,然后回到桌面, 左右滑動桌面并抓取 Systrace 和 MethodTrace ,可以看到跟上面的網(wǎng)易新聞的表現(xiàn)一致

Android 中的“后臺無效動畫“行為分析

抓取了 QQ 音樂的后臺動畫時候的 MethodTrace 發(fā)現(xiàn),也是由于退到后臺之后,沒有暫停動畫導(dǎo)致的,也是 Airbnb 的 Lottie 的鍋, 而且 QQ 音樂有三個動畫沒有停止,比網(wǎng)易新聞還要嚴重一些

Android 中的“后臺無效動畫“行為分析

放大后可以看到

Android 中的“后臺無效動畫“行為分析

當(dāng)然也不是每一個都是 Airbnb 的 Lottie 動畫庫引起的,比如下面這個,就是普通的動畫沒有結(jié)束

Android 中的“后臺無效動畫“行為分析

根本原因

根本原因是應(yīng)用在不可見之后,沒有將動畫暫停,導(dǎo)致應(yīng)用切換到后臺之后,依然在刷新動畫的回調(diào),但此時由于是不可見的,不會觸發(fā) Input Callback 和 draw Callback ,所以也不會有任何的繪制操作,也就是說這個 Animation 的刷新完全是沒有意義的(當(dāng)然也有可能是業(yè)務(wù)需求?)

上面兩個例子里面,網(wǎng)易新聞和 QQ 音樂都是因為使用了 Lottie 來實現(xiàn)動畫,但是沒有正確的關(guān)閉導(dǎo)致的。

開發(fā)建議

Lottie 庫的 issue 列表里面有人提到了這個情況:

提出問題:

  • I recently did some benchmarking on an app which uses lottie to do some animations (autoplay and looping). I noticed that there is quite some CPU usage when the app is in the background and tried to investigate.
  • It seems to me looping animations do not pause/stop when the containing LottieAnimationView is off screen, and/or the Activity is paused.
  • I believe this is due to the cleanup code being only in onDetachedFromWindow() which is not necessarily being called once the Activity goes into a paused state and most definitely not, when the view is simply not visible (GONE, INVISIBLE ) anymore.

解決方法:

  • Overriding LottieAnimationView and doing the following solves the visibility issue for me and Lottie is paused when not visible.

 

  1. @Override 
  2. protected void onVisibilityChanged(@NonNull View changedView, int visibility) { 
  3.     super.onVisibilityChanged(changedView, visibility); 
  4.     if (visibility == VISIBLE && wasAnimatingWhenVisibilityChanged) { 
  5.         resumeAnimation(); 
  6.     } else { 
  7.         if (isAnimating()) { 
  8.             wasAnimatingWhenVisibilityChanged = true
  9.             pauseAnimation(); 
  10.         } else { 
  11.             wasAnimatingWhenVisibilityChanged = false
  12.         } 
  13.     } 

總之就是 : 當(dāng) App 不可見的時候,停止所有的動畫:pauseAnimation!!!

責(zé)任編輯:未麗燕 來源: Android Performance
相關(guān)推薦

2022-09-28 11:34:27

用戶行為數(shù)據(jù)業(yè)務(wù)

2017-07-24 09:18:55

大數(shù)據(jù)數(shù)據(jù)分析行為事件分析

2021-03-10 17:22:01

人臉識別人工智能數(shù)據(jù)

2021-02-02 11:02:20

React任務(wù)饑餓行為優(yōu)先級任務(wù)

2014-05-30 09:44:08

Android折紙動畫

2023-06-28 07:54:44

數(shù)據(jù)治理數(shù)據(jù)分析

2015-12-31 17:47:54

2013-03-28 13:51:19

Android設(shè)置全屏Android程序開發(fā)

2011-08-12 11:31:46

iPhoneUIView動畫

2016-10-21 14:17:13

大數(shù)據(jù)技術(shù)大數(shù)據(jù)行為分析

2013-09-05 09:33:25

大數(shù)據(jù)盧東明SAP

2009-12-25 10:11:46

WPF后臺控制動畫

2023-02-01 23:00:42

大數(shù)據(jù)

2024-04-18 08:30:00

留存分析模型數(shù)據(jù)分析

2024-09-19 15:22:24

2018-01-24 18:00:21

LinuxDebianvim

2022-12-07 08:31:45

ClickHouse并行計算數(shù)據(jù)

2022-03-25 12:22:01

行為風(fēng)險分析網(wǎng)絡(luò)攻擊惡意軟件

2020-05-13 11:10:32

安全 機器學(xué)習(xí)數(shù)據(jù)

2010-09-08 15:18:55

點贊
收藏

51CTO技術(shù)棧公眾號