我运行我的应用程序,它使用 GPS 和蓝牙,然后点击返回按钮,让它离开屏幕。我通过 LogCat 验证了应用程序的 onDestroy 被调用。OnDestroy 删除位置侦听器并关闭我的应用程序的蓝牙服务。8 小时后我看手机,电池电量已消耗一半,我的应用程序负责根据手机的电池使用屏幕。如果我使用手机的设置菜单强制停止应用程序,则不会发生这种情况。所以我的问题是:除了移除监听器来阻止定位服务消耗电力之外,我还需要做更多的事情吗?这是我唯一能想到的,当应用程序应该处于休眠状态时,电池电量会耗尽到那种程度。
这是我的 onStart() ,我在其中打开与位置相关的东西和蓝牙:
@Override
public void onStart() {
super.onStart();
if(D_GEN) Log.d(TAG, "MainActivity onStart, adding location listeners");
// If BT is not on, request that it be enabled.
// setupBluetooth() will then be called during onActivityResult
if (!mBluetoothAdapter.isEnabled()) {
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
// Otherwise, setup the Bluetooth session
} else {
if (mBluetoothService == null)
setupBluetooth();
}
// Define listeners that respond to location updates
mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_UPDATE_INTERVAL, 0, this);
mLocationManager.addGpsStatusListener(this);
mLocationManager.addNmeaListener(this);
}
这是我的 onDestroy() 我删除它们的地方:
public void onDestroy() {
super.onDestroy();
if(D_GEN) Log.d(TAG, "MainActivity onDestroy, removing update listeners");
// Remove the location updates
if(mLocationManager != null) {
mLocationManager.removeUpdates(this);
mLocationManager.removeGpsStatusListener(this);
mLocationManager.removeNmeaListener(this);
}
if(D_GEN) Log.d(TAG, "MainActivity onDestroy, finished removing update listeners");
if(D_GEN) Log.d(TAG, "MainActivity onDestroy, stopping Bluetooth");
stopBluetooth();
if(D_GEN) Log.d(TAG, "MainActivity onDestroy finished");
}