Consumo de energía de las aplicaciones de Android

¿Sus usuarios se quejan de que la aplicación agota la energía de su teléfono muy rápidamente? ¿Un servicio en segundo plano en ejecución se detiene repentinamente? ¿Los mensajes de FCM no llegan al usuario? ¿Qué conecta estas tres preguntas serias? La respuesta es simple: el trabajo está alineado incorrectamente con el consumo de energía de la aplicación.



Echemos un vistazo a los puntos principales relacionados con este tema. Quizás esto le permitirá en el futuro evitar los errores que enfrentan la mayoría de los desarrolladores de aplicaciones móviles.



Existe una gran cantidad de información dispersa en Internet, que uno de los principales objetivos de este artículo fue recopilarla en una única guía general.



imagen



Información general



Android tiene las siguientes características de plataforma para optimizar el consumo de energía:





Android 6 presenta dos funciones para conservar la energía de la batería controlando el comportamiento de las aplicaciones cuando el dispositivo no está cargando:



  • Modo dormido.
  • Aplicación en espera.


Modo dormido



Doze, (maintenance window). .



- , Doze. , , Jobs, Alarms.



Doze, . (maintenance window) , Jobs, Alarms .





maintenance windows, , .



Doze :





Doze:





App StandBy, App StandBy Buckets



App StandBy , , . App StandBy , :



  • .
  • ( Foreground service, Activity).
  • , .
  • .


, Standby, . , .



, «» Samsung.



Android 9 . :





targetSdk.



App StandBy Buckets , . . , , , .



, :



  • Active. , . .. Activity, Foreground service, synchronized adapter, , . , .
  • Working set. , , . .
  • Frequent. , , . , FCM .
  • Rare. , . FCM . .
  • Never. , , . .


.



, , . . , Rare Active, , . , .



App StandBy Buckets:



  • , .
  • Launcher Activity, .
  • . , .
  • high-priority FCM-, , . high-priority, , normal-priority.


Firebase Cloud Messaging App StandBy Doze



FCM . FCM Doze App StandBy FCM-. , Doze App StandBy. , .





Doze Mode



  • ADB (android device bridge) :


export PATH=«~/Library/Android/sdk/platform-tools»:$PATH


  • :


adb shell dumpsys deviceidle force-idle


  • :


adb shell dumpsys deviceidle unforce


  • :


adb shell dumpsys battery reset


  • .


App StandBy Android < 9



  • App StandBy:


$ adb shell dumpsys battery unplug
$ adb shell am set-inactive <package_name> true


  • :


$ adb shell am set-inactive <package_name> false
$ adb shell am get-inactive <package_name>


  • . , . , .


App Standby Buckets



App StandBy bucket :



adb shell am set-standby-bucket <package_name> active|working_set|frequent|rare


, :



adb shell am get-standby-bucket <package_name>




  • :


adb shell cmd appops set <package_name> RUN_ANY_IN_BACKGROUND ignore


  • :


adb shell cmd appops set <package_name> RUN_ANY_IN_BACKGROUND allow


Battery safety



  • :




  • :


adb shell settings put global low_power 1


  • :


adb shell dumpsys battery reset


.



, Android 7:



  • `CONNECTIVITY_ACTION`, receiver . receiver , .
  • `ACTION_NEW_PICTURE` `ACTION_NEW_VIDEO`.


, Android 9:



, , . :



  • wake locks.
  • .


.



Battery Historian



Battery Historian . , , .



Battery Historian



Docker.



  • ADB (android device bridge) :


export PATH=«~/Library/Android/sdk/platform-tools»:$PATH


  • .
  • ADB-.


adb kill-server


  • :



adb devices


  • :





adb shell dumpsys batterystats --reset


  • .
  • .
  • , :


adb devices


  • :


adb shell dumpsys batterystats > [path/b]batterystats.txt


  • :


adb bugreport [path/]bugreport.zip


  • ( ):


docker run -p 5554:5554 gcr.io/android-battery-historian/stable:3.0 --port 5554




  • BatteryHistorian:




, , wake locks, JobScheduler . , , . - , .



Energy Profiler



Energy Profiler — Android Studio . , . , .



BatteryStats + UI-



, BatteryStats UI-.



  • bash-:


echo Write test class path e.g. <____>
read testName
export PATH=«~/Library/Android/sdk/platform-tools»:$PATH
adb shell dumpsys battery unplug
adb shell dumpsys batterystats --reset
adb shell am instrument -w  \ -e class $testName \ com.myapp.test/androidx.test.runner.AndroidJUnitRunner
adb shell dumpsys batterystats | awk -f BatteryStatsParseScript.awk > BatteryTestsResult.txt
adb shell dumpsys batterystats > BatteryTestsResultFull.txt
adb shell dumpsys batterystats reset
echo You can find the output file in the parent directory named BatteryTestsResult.txt


  • . , `com.myApp.MyTestEspressoTest`.
  • ADB.
  • .
  • BatteryStats.
  • , , , .
  • .awk-. BatteryTestsResultFull.txt ( , ).
  • .
  • BatteryStats.
  • !


, , .awk-. , .. , , . BatteryTestsResult.txt :



Estimated battery capacity: 3700 mAh

Time on battery: 32s 609ms (100.0%) realtime, 32s 610ms (100.0%) uptime

App Uid u0a358
Cpu Usage: 1.56 mAh
Radio Usage:  mAh
WiFi Usage: 0.0476 mAh
Wake Usage:  mAh
Sensor Usage:  mAh
GPS Usage: 0.0417 mAh
Total App Usage: 1.65mAh

Total time in seconds: 32 seconds
Usage per second: 0.0515625 mAh/seconds

User activity: 14 touch

Wi-Fi network: 335.22KB received, 342.84KB sent (packets 745 received, 758 sent)


, BatteryStats. .awk- .



P.S. Samsung



https://dontkillmyapp.com, , . , , Samsung . .



Samsung S8 App Power Monitor. , whitelist. Samsung — « ».



, :





, Android-, , , . , — , . .




All Articles