Android 设备清理内存 RAM

简介: Android 设备清理内存 RAM

实现思路 调用系统的killBackgroundProcesses

具体实现如下:

1.配置权限

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>

2.具体实现流程

public class ClearMemoryActivity extends Activity {  
    private static final String TAG = "ClearMemoryActivity";  
  
    /** 
     * Called when the activity is first created. 
     */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
  
        Button clear = (Button) findViewById(R.id.clear);  
        clear.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                //To change body of implemented methods use File | Settings | File Templates.  
                ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
                List<RunningAppProcessInfo> infoList = am.getRunningAppProcesses();  
                List<ActivityManager.RunningServiceInfo> serviceInfos = am.getRunningServices(100);  
  
                long beforeMem = getAvailMemory(ClearMemoryActivity.this);  
                Log.d(TAG, "-----------before memory info : " + beforeMem);  
                int count = 0;  
                if (infoList != null) {  
                    for (int i = 0; i < infoList.size(); ++i) {  
                        RunningAppProcessInfo appProcessInfo = infoList.get(i);  
                        Log.d(TAG, "process name : " + appProcessInfo.processName);  
                        //importance 该进程的重要程度  分为几个级别,数值越低就越重要。  
                        Log.d(TAG, "importance : " + appProcessInfo.importance);  
  
                        // 一般数值大于RunningAppProcessInfo.IMPORTANCE_SERVICE的进程都长时间没用或者空进程了  
                        // 一般数值大于RunningAppProcessInfo.IMPORTANCE_VISIBLE的进程都是非可见进程,也就是在后台运行着  
                        if (appProcessInfo.importance > RunningAppProcessInfo.IMPORTANCE_VISIBLE) {  
                            String[] pkgList = appProcessInfo.pkgList;  
                            for (int j = 0; j < pkgList.length; ++j) {//pkgList 得到该进程下运行的包名  
                                Log.d(TAG, "It will be killed, package name : " + pkgList[j]);  
                                am.killBackgroundProcesses(pkgList[j]);  
                                count++;  
                            }  
                        }  
  
                    }  
                }  
  
                long afterMem = getAvailMemory(ClearMemoryActivity.this);  
                Log.d(TAG, "----------- after memory info : " + afterMem);  
                Toast.makeText(ClearMemoryActivity.this, "clear " + count + " process, "  
                            + (afterMem - beforeMem) + "M", Toast.LENGTH_LONG).show();  
            }  
        });  
 
    }  
  
    //获取可用内存大小  
    private long getAvailMemory(Context context) {  
        // 获取android当前可用内存大小  
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
        MemoryInfo mi = new MemoryInfo();  
        am.getMemoryInfo(mi);  
        //mi.availMem; 当前系统的可用内存  
        //return Formatter.formatFileSize(context, mi.availMem);// 将获取的内存大小规格化  
        Log.d(TAG, "可用内存---->>>" + mi.availMem / (1024 * 1024));  
        return mi.availMem / (1024 * 1024);  
    }  
}  

注意:getRunningAppProcesses()只能获取到自身app应用的信息,如果要获取其他应用的信息,需要将该apk设置为 "android.uid.system" 或系统签名


目录
相关文章
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
812 64
|
存储 Android开发 数据安全/隐私保护
如何在Android设备上撤销Flutter应用程序的所有权限?
如何在Android设备上撤销Flutter应用程序的所有权限?
1127 64
|
缓存 Android开发 开发者
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
2948 62
|
开发工具 Android开发 开发者
在Android设备上运行Flutter应用程序时,如果遇到设备未授权的问题该如何解决?
在Android设备上运行Flutter应用程序时,如果遇到设备未授权的问题该如何解决?
1165 61
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
577 1
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10958 2
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
1304 38
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
1142 15
Android 系统缓存扫描与清理方法分析
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
776 16
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
567 6