diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java index 98f19fedb3d..b1e4c34e6ea 100644 --- a/src/com/android/settings/fuelgauge/BatteryInfo.java +++ b/src/com/android/settings/fuelgauge/BatteryInfo.java @@ -153,6 +153,7 @@ public class BatteryInfo { new AsyncTask() { @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; } diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java index e95067936d6..6563155fb75 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageBase.java +++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java @@ -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 loader, BatteryUsageStats batteryUsageStats) { + closeBatteryUsageStatsIfNeeded(); mBatteryUsageStats = batteryUsageStats; PowerUsageBase.this.onLoadFinished(mRefreshType); } @@ -138,4 +130,17 @@ public abstract class PowerUsageBase extends DashboardFragment { public void onLoaderReset(Loader loader) { } } + + private void closeBatteryUsageStatsIfNeeded() { + if (mBatteryUsageStats == null) { + return; + } + try { + mBatteryUsageStats.close(); + } catch (Exception e) { + Log.e(TAG, "BatteryUsageStats.close() failed", e); + } finally { + mBatteryUsageStats = null; + } + } }