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:
@@ -153,6 +153,7 @@ public class BatteryInfo {
|
|||||||
new AsyncTask<Void, Void, BatteryInfo>() {
|
new AsyncTask<Void, Void, BatteryInfo>() {
|
||||||
@Override
|
@Override
|
||||||
protected BatteryInfo doInBackground(Void... params) {
|
protected BatteryInfo doInBackground(Void... params) {
|
||||||
|
boolean shouldCloseBatteryUsageStats = false;
|
||||||
BatteryUsageStats stats;
|
BatteryUsageStats stats;
|
||||||
if (batteryUsageStats != null) {
|
if (batteryUsageStats != null) {
|
||||||
stats = batteryUsageStats;
|
stats = batteryUsageStats;
|
||||||
@@ -160,6 +161,7 @@ public class BatteryInfo {
|
|||||||
try {
|
try {
|
||||||
stats = context.getSystemService(BatteryStatsManager.class)
|
stats = context.getSystemService(BatteryStatsManager.class)
|
||||||
.getBatteryUsageStats();
|
.getBatteryUsageStats();
|
||||||
|
shouldCloseBatteryUsageStats = true;
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e);
|
Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e);
|
||||||
// Use default BatteryUsageStats.
|
// Use default BatteryUsageStats.
|
||||||
@@ -168,10 +170,12 @@ public class BatteryInfo {
|
|||||||
}
|
}
|
||||||
final BatteryInfo batteryInfo =
|
final BatteryInfo batteryInfo =
|
||||||
getBatteryInfo(context, stats, shortString);
|
getBatteryInfo(context, stats, shortString);
|
||||||
try {
|
if (shouldCloseBatteryUsageStats) {
|
||||||
stats.close();
|
try {
|
||||||
} catch (Exception e) {
|
stats.close();
|
||||||
Log.e(TAG, "BatteryUsageStats.close() failed", e);
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "BatteryUsageStats.close() failed", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return batteryInfo;
|
return batteryInfo;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ public abstract class PowerUsageBase extends DashboardFragment {
|
|||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
mBatteryBroadcastReceiver.unRegister();
|
mBatteryBroadcastReceiver.unRegister();
|
||||||
|
closeBatteryUsageStatsIfNeeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void restartBatteryStatsLoader(int refreshType) {
|
protected void restartBatteryStatsLoader(int refreshType) {
|
||||||
@@ -104,16 +105,6 @@ public abstract class PowerUsageBase extends DashboardFragment {
|
|||||||
final long startTime = System.currentTimeMillis();
|
final long startTime = System.currentTimeMillis();
|
||||||
historyPref.setBatteryUsageStats(mBatteryUsageStats);
|
historyPref.setBatteryUsageStats(mBatteryUsageStats);
|
||||||
BatteryUtils.logRuntime(TAG, "updatePreference", startTime);
|
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
|
private class BatteryUsageStatsLoaderCallbacks
|
||||||
@@ -130,6 +121,7 @@ public abstract class PowerUsageBase extends DashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<BatteryUsageStats> loader,
|
public void onLoadFinished(Loader<BatteryUsageStats> loader,
|
||||||
BatteryUsageStats batteryUsageStats) {
|
BatteryUsageStats batteryUsageStats) {
|
||||||
|
closeBatteryUsageStatsIfNeeded();
|
||||||
mBatteryUsageStats = batteryUsageStats;
|
mBatteryUsageStats = batteryUsageStats;
|
||||||
PowerUsageBase.this.onLoadFinished(mRefreshType);
|
PowerUsageBase.this.onLoadFinished(mRefreshType);
|
||||||
}
|
}
|
||||||
@@ -138,4 +130,17 @@ public abstract class PowerUsageBase extends DashboardFragment {
|
|||||||
public void onLoaderReset(Loader<BatteryUsageStats> loader) {
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user