源码整理

This commit is contained in:
2025-12-26 18:31:25 +08:00
parent f4a2a1585d
commit 3ec1bbe264

View File

@@ -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