@@ -447,6 +447,8 @@ public void onBootPhase(int phase) {
447447 userFileExists = mAppIdleHistory .userFileExists (UserHandle .USER_SYSTEM );
448448 }
449449
450+ loadHeadlessSystemAppCache ();
451+
450452 if (mPendingInitializeDefaults || !userFileExists ) {
451453 initializeDefaultsForSystemApps (UserHandle .USER_SYSTEM );
452454 }
@@ -1670,6 +1672,8 @@ public void onReceive(Context context, Intent intent) {
16701672 clearCarrierPrivilegedApps ();
16711673 // ACTION_PACKAGE_ADDED is called even for system app downgrades.
16721674 evaluateSystemAppException (pkgName , userId );
1675+ mHandler .obtainMessage (MSG_CHECK_PACKAGE_IDLE_STATE , userId , -1 , pkgName )
1676+ .sendToTarget ();
16731677 }
16741678 if ((Intent .ACTION_PACKAGE_REMOVED .equals (action ) ||
16751679 Intent .ACTION_PACKAGE_ADDED .equals (action ))) {
@@ -1684,7 +1688,7 @@ public void onReceive(Context context, Intent intent) {
16841688
16851689 private void evaluateSystemAppException (String packageName , int userId ) {
16861690 if (!mSystemServicesReady ) {
1687- // The app will be evaluated in initializeDefaultsForSystemApps() when possible .
1691+ // The app will be evaluated in when services are ready .
16881692 return ;
16891693 }
16901694 try {
@@ -1710,6 +1714,7 @@ private void evaluateSystemAppException(@Nullable PackageInfo pkgInfo) {
17101714 }
17111715 }
17121716
1717+ /** Call on a system version update to temporarily reset system app buckets. */
17131718 @ Override
17141719 public void initializeDefaultsForSystemApps (int userId ) {
17151720 if (!mSystemServicesReady ) {
@@ -1721,7 +1726,7 @@ public void initializeDefaultsForSystemApps(int userId) {
17211726 + "appIdleEnabled=" + mAppIdleEnabled );
17221727 final long elapsedRealtime = mInjector .elapsedRealtime ();
17231728 List <PackageInfo > packages = mPackageManager .getInstalledPackagesAsUser (
1724- PackageManager .GET_ACTIVITIES | PackageManager . MATCH_DISABLED_COMPONENTS ,
1729+ PackageManager .MATCH_DISABLED_COMPONENTS ,
17251730 userId );
17261731 final int packageCount = packages .size ();
17271732 synchronized (mAppIdleLock ) {
@@ -1734,15 +1739,25 @@ public void initializeDefaultsForSystemApps(int userId) {
17341739 mAppIdleHistory .reportUsage (packageName , userId , STANDBY_BUCKET_ACTIVE ,
17351740 REASON_SUB_USAGE_SYSTEM_UPDATE , 0 ,
17361741 elapsedRealtime + mSystemUpdateUsageTimeoutMillis );
1737-
1738- evaluateSystemAppException (pi );
17391742 }
17401743 }
17411744 // Immediately persist defaults to disk
17421745 mAppIdleHistory .writeAppIdleTimes (userId );
17431746 }
17441747 }
17451748
1749+ /** Call on a system update to temporarily reset system app buckets. */
1750+ private void loadHeadlessSystemAppCache () {
1751+ Slog .d (TAG , "Loading headless system app cache. appIdleEnabled=" + mAppIdleEnabled );
1752+ final List <PackageInfo > packages = mPackageManager .getInstalledPackagesAsUser (
1753+ PackageManager .GET_ACTIVITIES | PackageManager .MATCH_DISABLED_COMPONENTS ,
1754+ UserHandle .USER_SYSTEM );
1755+ final int packageCount = packages .size ();
1756+ for (int i = 0 ; i < packageCount ; i ++) {
1757+ evaluateSystemAppException (packages .get (i ));
1758+ }
1759+ }
1760+
17461761 @ Override
17471762 public void postReportContentProviderUsage (String name , String packageName , int userId ) {
17481763 SomeArgs args = SomeArgs .obtain ();
@@ -1835,6 +1850,14 @@ public void dumpState(String[] args, PrintWriter pw) {
18351850 pw .print ("mScreenThresholds=" ); pw .println (Arrays .toString (mAppStandbyScreenThresholds ));
18361851 pw .print ("mElapsedThresholds=" ); pw .println (Arrays .toString (mAppStandbyElapsedThresholds ));
18371852 pw .println ();
1853+
1854+ pw .println ("mHeadlessSystemApps=[" );
1855+ for (int i = mHeadlessSystemApps .size () - 1 ; i >= 0 ; --i ) {
1856+ pw .print (mHeadlessSystemApps .keyAt (i ));
1857+ pw .println ("," );
1858+ }
1859+ pw .println ("]" );
1860+ pw .println ();
18381861 }
18391862
18401863 /**
0 commit comments