diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index d641e7bef3c..2fb50652640 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -167,7 +167,14 @@ public class BatteryInfo { new String[0], /* includePowerModels */ false).build(); } } - return getBatteryInfo(context, stats, shortString); + final BatteryInfo batteryInfo = + getBatteryInfo(context, stats, shortString); + try { + stats.close(); + } catch (Exception e) { + Log.e(TAG, "BatteryUsageStats.close() failed", e); + } + return batteryInfo; } @Override diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java index b05e64a560f..627a5f11f9c 100644 --- a/src/com/android/settings/fuelgauge/BatteryUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryUtils.java @@ -405,6 +405,11 @@ public class BatteryUtils { batteryUsageStats, estimate, elapsedRealtimeUs, false /* shortString */); BatteryUtils.logRuntime(tag, "BatteryInfoLoader.loadInBackground", startTime); + try { + batteryUsageStats.close(); + } catch (Exception e) { + Log.e(TAG, "BatteryUsageStats.close() failed", e); + } return batteryInfo; } diff --git a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java index 0623bcb814d..c890ea9a77f 100644 --- a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java +++ b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java @@ -22,6 +22,7 @@ import android.os.BatteryStats; import android.os.BatteryStatsManager; import android.os.BatteryUsageStats; import android.os.SystemClock; +import android.util.Log; import com.android.internal.os.BatteryStatsHelper; import com.android.settings.overlay.FeatureFactory; @@ -34,6 +35,8 @@ import java.util.ArrayList; import java.util.List; public class DebugEstimatesLoader extends AsyncLoaderCompat> { + private static final String TAG = "DebugEstimatesLoader"; + private BatteryStatsHelper mStatsHelper; public DebugEstimatesLoader(Context context, BatteryStatsHelper statsHelper) { @@ -58,8 +61,16 @@ public class DebugEstimatesLoader extends AsyncLoaderCompat> { Intent batteryBroadcast = getContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); BatteryStats stats = mStatsHelper.getStats(); - BatteryUsageStats batteryUsageStats = - context.getSystemService(BatteryStatsManager.class).getBatteryUsageStats(); + BatteryUsageStats batteryUsageStats; + try { + batteryUsageStats = context.getSystemService(BatteryStatsManager.class) + .getBatteryUsageStats(); + } catch (RuntimeException e) { + Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e); + // Use default BatteryUsageStats. + batteryUsageStats = new BatteryUsageStats.Builder( + new String[0], /* includePowerModels */ false).build(); + } BatteryInfo oldinfo = BatteryInfo.getBatteryInfoOld(getContext(), batteryBroadcast, batteryUsageStats, elapsedRealtimeUs, false); @@ -74,6 +85,12 @@ public class DebugEstimatesLoader extends AsyncLoaderCompat> { List infos = new ArrayList<>(); infos.add(oldinfo); infos.add(newInfo); + + try { + batteryUsageStats.close(); + } catch (Exception e) { + Log.e(TAG, "BatteryUsageStats.close() failed", e); + } return infos; } } diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java index 16567fee07c..e95067936d6 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageBase.java +++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java @@ -22,6 +22,7 @@ import android.content.Context; import android.os.BatteryUsageStats; import android.os.Bundle; import android.os.UserManager; +import android.util.Log; import android.view.Menu; import androidx.annotation.NonNull; @@ -103,6 +104,16 @@ 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