源码整理
This commit is contained in:
@@ -34,29 +34,31 @@ import java.util.Map;
|
|||||||
/**
|
/**
|
||||||
* 电池报告页面,统计应用24小时运行时长与电池消耗情况
|
* 电池报告页面,统计应用24小时运行时长与电池消耗情况
|
||||||
* 支持应用搜索、累计耗电计算、电池广播监听,适配 API30
|
* 支持应用搜索、累计耗电计算、电池广播监听,适配 API30
|
||||||
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
||||||
* @Date 2025/10/22 13:21
|
|
||||||
*/
|
*/
|
||||||
public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLActivity {
|
||||||
// ======================== 静态常量 =========================
|
// ======================== 静态常量(按功能分类) =========================
|
||||||
public static final String TAG = "BatteryReportActivity";
|
public static final String TAG = "BatteryReportActivity";
|
||||||
private static final long ONE_DAY_MS = 24 * 3600 * 1000; // 24小时毫秒数
|
private static final long ONE_DAY_MS = 24 * 3600 * 1000; // 24小时毫秒数
|
||||||
private static final long ONE_MINUTE_MS = 60 * 1000; // 1分钟毫秒数
|
private static final long ONE_MINUTE_MS = 60 * 1000; // 1分钟毫秒数
|
||||||
|
|
||||||
// ======================== 成员变量 =========================
|
// ======================== 成员变量(按依赖优先级+功能分类) =========================
|
||||||
// UI组件
|
// UI组件
|
||||||
private Toolbar mToolbar;
|
private Toolbar mToolbar;
|
||||||
private RecyclerView rvBatteryReport;
|
private RecyclerView rvBatteryReport;
|
||||||
private EditText etSearch;
|
private EditText etSearch;
|
||||||
|
|
||||||
// 数据与适配器
|
// 数据与适配器
|
||||||
private BatteryReportAdapter adapter;
|
private BatteryReportAdapter adapter;
|
||||||
private List<AppBatteryModel> dataList = new ArrayList<AppBatteryModel>();
|
private List<AppBatteryModel> dataList = new ArrayList<AppBatteryModel>();
|
||||||
private List<AppBatteryModel> filteredList = new ArrayList<AppBatteryModel>();
|
private List<AppBatteryModel> filteredList = new ArrayList<AppBatteryModel>();
|
||||||
|
|
||||||
// 电池相关
|
// 电池相关
|
||||||
private BroadcastReceiver batteryReceiver;
|
private BroadcastReceiver batteryReceiver;
|
||||||
private int batteryCapacity = 5400; // 电池容量(mAh)
|
private int batteryCapacity = 5400; // 电池容量(mAh)
|
||||||
private float lastBatteryPercent = 100.0f;
|
private float lastBatteryPercent = 100.0f;
|
||||||
private long lastCheckTime = System.currentTimeMillis();
|
private long lastCheckTime = System.currentTimeMillis();
|
||||||
|
|
||||||
// 缓存相关
|
// 缓存相关
|
||||||
private Map<String, Long> appRunTimeCache = new HashMap<String, Long>();
|
private Map<String, Long> appRunTimeCache = new HashMap<String, Long>();
|
||||||
private Map<String, String> packageToAppNameCache = new HashMap<String, String>();
|
private Map<String, String> packageToAppNameCache = new HashMap<String, String>();
|
||||||
@@ -73,7 +75,7 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
return TAG;
|
return TAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================== 生命周期方法 =========================
|
// ======================== 生命周期方法(按执行顺序排列) =========================
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -84,6 +86,7 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
initView();
|
initView();
|
||||||
// 初始化PackageManager
|
// 初始化PackageManager
|
||||||
mPackageManager = getPackageManager();
|
mPackageManager = getPackageManager();
|
||||||
|
LogUtils.d(TAG, "【onCreate】基础组件初始化完成");
|
||||||
|
|
||||||
// 权限检查(Java7 传统条件判断)
|
// 权限检查(Java7 传统条件判断)
|
||||||
if (!hasUsageStatsPermission(this)) {
|
if (!hasUsageStatsPermission(this)) {
|
||||||
@@ -100,11 +103,12 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
updateAppRunTimeToModel();
|
updateAppRunTimeToModel();
|
||||||
calculateInitial24hTotalConsumption();
|
calculateInitial24hTotalConsumption();
|
||||||
filteredList.addAll(dataList);
|
filteredList.addAll(dataList);
|
||||||
|
LogUtils.d(TAG, "【onCreate】数据初始化完成,原始数据量:" + dataList.size());
|
||||||
|
|
||||||
// 初始化适配器
|
// 初始化适配器
|
||||||
adapter = new BatteryReportAdapter(this, filteredList, mPackageManager, packageToAppNameCache);
|
adapter = new BatteryReportAdapter(this, filteredList, mPackageManager, packageToAppNameCache);
|
||||||
rvBatteryReport.setAdapter(adapter);
|
rvBatteryReport.setAdapter(adapter);
|
||||||
LogUtils.d(TAG, "【onCreate】适配器初始化完成,数据量:" + filteredList.size());
|
LogUtils.d(TAG, "【onCreate】适配器初始化完成,过滤后数据量:" + filteredList.size());
|
||||||
|
|
||||||
// 绑定搜索监听
|
// 绑定搜索监听
|
||||||
bindSearchListener();
|
bindSearchListener();
|
||||||
@@ -156,8 +160,9 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||||
LogUtils.d(TAG, "【bindSearchListener】搜索关键词变化:" + s.toString());
|
String keyword = s.toString().trim();
|
||||||
filterAppsByPackageAndName(s.toString());
|
LogUtils.d(TAG, "【bindSearchListener】搜索关键词变化:" + keyword);
|
||||||
|
filterAppsByPackageAndName(keyword);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -263,6 +268,7 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
* @return 应用名称,获取失败返回包名
|
* @return 应用名称,获取失败返回包名
|
||||||
*/
|
*/
|
||||||
private String getAppNameByPackage(String packageName) {
|
private String getAppNameByPackage(String packageName) {
|
||||||
|
LogUtils.v(TAG, "【getAppNameByPackage】查询包名:" + packageName);
|
||||||
try {
|
try {
|
||||||
ApplicationInfo appInfo = mPackageManager.getApplicationInfo(packageName, 0);
|
ApplicationInfo appInfo = mPackageManager.getApplicationInfo(packageName, 0);
|
||||||
return mPackageManager.getApplicationLabel(appInfo).toString();
|
return mPackageManager.getApplicationLabel(appInfo).toString();
|
||||||
@@ -356,6 +362,7 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
* @param runTimeMap 应用运行时长映射
|
* @param runTimeMap 应用运行时长映射
|
||||||
*/
|
*/
|
||||||
private void calculateSingleConsumptionAndAccumulate(float dropPercent, Map<String, Long> runTimeMap) {
|
private void calculateSingleConsumptionAndAccumulate(float dropPercent, Map<String, Long> runTimeMap) {
|
||||||
|
LogUtils.d(TAG, "【calculateSingleConsumptionAndAccumulate】开始计算,电池下降百分比:" + dropPercent);
|
||||||
long totalSingleRunTime = 0;
|
long totalSingleRunTime = 0;
|
||||||
// 1. 计算本次电池下降期间的总运行时长
|
// 1. 计算本次电池下降期间的总运行时长
|
||||||
for (Map.Entry<String, Long> entry : runTimeMap.entrySet()) {
|
for (Map.Entry<String, Long> entry : runTimeMap.entrySet()) {
|
||||||
@@ -393,7 +400,7 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 4. 重新应用过滤并刷新列表
|
// 4. 重新应用过滤并刷新列表
|
||||||
filterAppsByPackageAndName(etSearch.getText().toString());
|
filterAppsByPackageAndName(etSearch.getText().toString().trim());
|
||||||
LogUtils.d(TAG, "【calculateSingleConsumptionAndAccumulate】单次耗电计算与累加完成,列表已刷新");
|
LogUtils.d(TAG, "【calculateSingleConsumptionAndAccumulate】单次耗电计算与累加完成,列表已刷新");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -456,7 +463,6 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
* - consumption:单次耗电(两次电池广播间的消耗)
|
* - consumption:单次耗电(两次电池广播间的消耗)
|
||||||
* - totalConsumption:累计耗电(24小时初始化值+后续单次累加)
|
* - totalConsumption:累计耗电(24小时初始化值+后续单次累加)
|
||||||
* - runTime:运行时长(ms)
|
* - runTime:运行时长(ms)
|
||||||
* - packageName:应用包名
|
|
||||||
*/
|
*/
|
||||||
public static class AppBatteryModel {
|
public static class AppBatteryModel {
|
||||||
private String packageName; // 应用包名(核心标识)
|
private String packageName; // 应用包名(核心标识)
|
||||||
@@ -519,6 +525,7 @@ public class BatteryReportActivity extends WinBoLLActivity implements IWinBoLLAc
|
|||||||
this.mDataList = dataList;
|
this.mDataList = dataList;
|
||||||
this.mPm = pm;
|
this.mPm = pm;
|
||||||
this.mPackageToNameCache = packageToNameCache;
|
this.mPackageToNameCache = packageToNameCache;
|
||||||
|
LogUtils.d(TAG, "【BatteryReportAdapter】适配器构造完成,数据量:" + dataList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user