今天闲来无事写了一个清内存的小东西,类似360,在桌面上悬浮,点击后清除后台无用程序,清除后台程序是通过调用ActivityManger.killBackgroundProcesses的方式来进行的,这样的方式有个不好的地方,就是重要性级别设置的高的应用杀不掉。关键代码如下所示 ActivityManager mActivityManager = MyManager.getActivityManager(mContext); List<ActivityManager> process = mActivityManager.getRunn 在Android平台上,开发一款桌面悬浮清理内存的APP涉及到多个核心知识点。我们要理解的是如何清除后台无用程序。在Android系统中,`ActivityManager`类提供了管理活动(Activity)和应用进程的功能,其中包括清理后台进程的方法。在描述中提到的关键代码片段中,开发者通过`ActivityManager`的`killBackgroundProcesses`方法来结束后台应用进程。 ```java ActivityManager mActivityManager = MyManager.getActivityManager(mContext); List<ActivityManager.RunningAppProcessInfo> process = mActivityManager.getRunningAppProcesses(); for (int i = 0; i < process.size(); i++) { ActivityManager.RunningAppProcessInfo ar = process.get(i); String packageName = ar.processName; // 重要级别判断并排除信任应用 if (ar.importance > ImportanceLevel && !MyManager.isTrust(packageName)) { mActivityManager.killBackgroundProcesses(packageName); } } ``` 这段代码首先获取了当前正在运行的App进程列表,然后遍历这些进程,判断每个进程的重要级别(`importance`),如果重要级别高于某个阈值(`ImportanceLevel`)并且该应用不在信任列表中,就调用`killBackgroundProcesses`方法来结束它。需要注意的是,这种方法可能无法杀死系统认定为重要的应用,因为系统会保护这些应用不被轻易关闭。 接下来,我们来看如何实现悬浮窗口功能。Android中的悬浮窗口通常通过`WindowManager`服务来实现,它允许我们将视图添加到窗口层次结构中,使其显示在所有其他应用之上。关键代码如下: ```java WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); int screenWidth = windowManager.getDefaultDisplay().getWidth(); int screenHeight = windowManager.getDefaultDisplay().getHeight(); if (mSmallFloatWin == null) { mSmallFloatWin = new SmallFloatWin(context); if (smallWindowParams == null) { smallWindowParams = new WindowManager.LayoutParams(); smallWindowParams.type = WindowManager.LayoutParams.TYPE_PHONE; smallWindowParams.format = PixelFormat.RGBA_8888; smallWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; smallWindowParams.gravity = Gravity.LEFT | Gravity.TOP; smallWindowParams.width = SmallFloatWin.viewWidth; smallWindowParams.height = SmallFloatWin.viewHeight; smallWindowParams.x = screenWidth; smallWindowParams.y = screenHeight / 2; } mSmallFloatWin.setParams(smallWindowParams); windowManager.addView(mSmallFloatWin, smallWindowParams); } ``` 这里创建了一个`WindowManager.LayoutParams`实例,设置了悬浮窗口的类型、格式、行为标志、对齐方式以及位置和大小。然后将这个参数传递给悬浮视图对象,并将其添加到窗口管理器中。 `WindowManager.LayoutParams`是一个非常重要的类,它定义了窗口的属性,如类型、格式、位置、大小、可见性和行为等。例如,`type`属性决定了窗口的层级,`flags`属性可以设置窗口的交互方式,如是否可触摸、是否可聚焦等,而`gravity`属性则控制窗口的对齐方式,如在屏幕的哪个角落显示。 此外,描述中提到了还可以通过root权限执行adb命令来清理后台进程,这种方式更具有系统级别的控制,但可能会涉及权限问题,而且对普通用户来说操作复杂度较高。 创建一个桌面悬浮的内存清理APP需要理解Android的进程管理机制、`ActivityManager`的使用,以及如何创建和管理悬浮窗口。同时,为了优化用户体验,还需要考虑如何智能地识别和处理后台应用,以及如何设计和实现友好的用户界面。
- 粉丝: 6
- 资源: 967
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用NetBeans连接SQLserver2008数据库教程中文WORD版最新版本
- XPath实例中文WORD版最新版本
- XPath语法规则中文WORD版最新版本
- XPath入门教程中文WORD版最新版本
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本