Refine the BatteryUsageStats close() method invoke timing

Refine invoke batteryUsageStats.close() timing to 1) avoid closing it before the UI is ready to ignore showing the battery usage app list data for AOSP version, and 2) avoid close the BatteryUsageStats which is passed from caller components in the BatteryInfo with unexpected behavior.

Bug: 220717612
Test: make RunSettingsRoboTests -j56 ROBOTEST_FILTER="com.android.settings.fuelgauge"
Change-Id: I0f75580ac68d72b41fa9a7f43aa6ea694f0992ff
This commit is contained in:
ykhung
2022-04-28 22:41:24 +08:00
committed by YK Hung
parent 7828dda503
commit c12b9500e6
2 changed files with 23 additions and 14 deletions

View File

@@ -153,6 +153,7 @@ public class BatteryInfo {
new AsyncTask<Void, Void, BatteryInfo>() {
@Override
protected BatteryInfo doInBackground(Void... params) {
boolean shouldCloseBatteryUsageStats = false;
BatteryUsageStats stats;
if (batteryUsageStats != null) {
stats = batteryUsageStats;
@@ -160,6 +161,7 @@ public class BatteryInfo {
try {
stats = context.getSystemService(BatteryStatsManager.class)
.getBatteryUsageStats();
shouldCloseBatteryUsageStats = true;
} catch (RuntimeException e) {
Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e);
// Use default BatteryUsageStats.
@@ -168,10 +170,12 @@ public class BatteryInfo {
}
final BatteryInfo batteryInfo =
getBatteryInfo(context, stats, shortString);
try {
stats.close();
} catch (Exception e) {
Log.e(TAG, "BatteryUsageStats.close() failed", e);
if (shouldCloseBatteryUsageStats) {
try {
stats.close();
} catch (Exception e) {
Log.e(TAG, "BatteryUsageStats.close() failed", e);
}
}
return batteryInfo;
}

View File

@@ -83,6 +83,7 @@ public abstract class PowerUsageBase extends DashboardFragment {
public void onStop() {
super.onStop();
mBatteryBroadcastReceiver.unRegister();
closeBatteryUsageStatsIfNeeded();
}
protected void restartBatteryStatsLoader(int refreshType) {
@@ -104,16 +105,6 @@ public abstract class PowerUsageBase extends DashboardFragment {
final long startTime = System.currentTimeMillis();
historyPref.setBatteryUsageStats(mBatteryUsageStats);
BatteryUtils.logRuntime(TAG, "updatePreference", startTime);
if (mBatteryUsageStats == null) {
return;
}
try {
mBatteryUsageStats.close();
} catch (Exception e) {
Log.e(TAG, "BatteryUsageStats.close() failed", e);
} finally {
mBatteryUsageStats = null;
}
}
private class BatteryUsageStatsLoaderCallbacks
@@ -130,6 +121,7 @@ public abstract class PowerUsageBase extends DashboardFragment {
@Override
public void onLoadFinished(Loader<BatteryUsageStats> loader,
BatteryUsageStats batteryUsageStats) {
closeBatteryUsageStatsIfNeeded();
mBatteryUsageStats = batteryUsageStats;
PowerUsageBase.this.onLoadFinished(mRefreshType);
}
@@ -138,4 +130,17 @@ public abstract class PowerUsageBase extends DashboardFragment {
public void onLoaderReset(Loader<BatteryUsageStats> loader) {
}
}
private void closeBatteryUsageStatsIfNeeded() {
if (mBatteryUsageStats == null) {
return;
}
try {
mBatteryUsageStats.close();
} catch (Exception e) {
Log.e(TAG, "BatteryUsageStats.close() failed", e);
} finally {
mBatteryUsageStats = null;
}
}
}