Мое приложение для очистки оперативной памяти Android не работает должным образом, поскольку оно не обнаруживает недавно использованные приложения для их очистки, хотя при запуске оно сначала запрашивает специальный доступ к использованию, а затем сканирует недавно использованные приложения по порядку. чтобы очистить их из ОЗУ. Я включил фоновый процесс уничтожения и разрешение на статистику использования в файле манифеста Android.
Я пробовал увеличивать и уменьшать временное окно с 24 часов до 5 минут, но это не работает как и должно быть
вот мой код, помогите мне найти решение, пожалуйста
package com.example.systemoptimizer6;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class RAMCleaner {
private static final String TAG = "RAMCleaner";
private final Context context;
private final PackageManager packageManager;
private final ActivityManager activityManager;
public static class AppInfo {
public final String appName;
public final Drawable appIcon;
public final String packageName;
public AppInfo(String appName, Drawable appIcon, String packageName) {
this.appName = appName;
this.appIcon = appIcon;
this.packageName = packageName;
}
}
public RAMCleaner(Context context) {
this.context = context;
this.packageManager = context.getPackageManager();
this.activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
}
@SuppressLint("ObsoleteSdkInt")
public List getRunningApps() {
List runningApps = new ArrayList();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.d(TAG, "Fetching apps using UsageStatsManager...");
runningApps = getAppsFromUsageStats();
}
if (runningApps.isEmpty()) {
Log.d(TAG, "UsageStatsManager returned no apps. Fallback to ActivityManager...");
runningApps = getAppsFromActivityManager();
}
if (runningApps.isEmpty()) {
Log.d(TAG, "No apps detected. Ensure permissions are granted.");
}
return runningApps;
}
private List getAppsFromUsageStats() {
List runningApps = new ArrayList();
UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
long currentTime = System.currentTimeMillis();
long timeWindow = currentTime - 1000 * 60 * 5; // Last 5 minutes
List usageStatsList = usageStatsManager.queryUsageStats(
UsageStatsManager.INTERVAL_DAILY,
timeWindow,
currentTime
);
if (usageStatsList == null || usageStatsList.isEmpty()) {
Log.d(TAG, "No usage stats available.");
return runningApps;
}
usageStatsList.sort((u1, u2) -> Long.compare(u2.getLastTimeUsed(), u1.getLastTimeUsed()));
for (UsageStats usageStats : usageStatsList) {
String packageName = usageStats.getPackageName();
try {
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);
if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 && !packageName.equals(context.getPackageName())) {
String appName = packageManager.getApplicationLabel(appInfo).toString();
Drawable appIcon = packageManager.getApplicationIcon(appInfo);
runningApps.add(new AppInfo(appName, appIcon, packageName));
Log.d(TAG, "Detected app: " + appName);
}
} catch (PackageManager.NameNotFoundException e) {
Log.d(TAG, "App not found: " + packageName + ", skipping.");
}
}
return runningApps;
}
private List getAppsFromActivityManager() {
List runningApps = new ArrayList();
List runningProcesses = activityManager.getRunningAppProcesses();
if (runningProcesses == null || runningProcesses.isEmpty()) {
Log.d(TAG, "No running processes found.");
return runningApps;
}
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
String packageName = processInfo.processName;
if (processInfo.importance > ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
continue; // Skip non-active apps
}
try {
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);
if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 && !packageName.equals(context.getPackageName())) {
String appName = packageManager.getApplicationLabel(appInfo).toString();
Drawable appIcon = packageManager.getApplicationIcon(appInfo);
runningApps.add(new AppInfo(appName, appIcon, packageName));
Log.d(TAG, "Detected app (ActivityManager): " + appName);
}
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "App not found: " + packageName, e);
}
}
return runningApps;
}
@SuppressLint("ObsoleteSdkInt")
public void cleanApps(List packageNames) {
for (String packageName : packageNames) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activityManager.killBackgroundProcesses(packageName);
Log.d(TAG, "Killed background process: " + packageName);
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ly-running
Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
Anonymous » » в форуме JAVA - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
Anonymous » » в форуме Android - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
Anonymous » » в форуме JAVA - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
Anonymous » » в форуме Android - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему мое приложение Ram Cleaner для Android не обнаруживает недавно запущенных
Anonymous » » в форуме Android - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-