手机卫士09_应用程序四种查看_ListView小标题_进程管理

1.悬浮窗体的功能实现:

1.1.应用程序的卸载: 包安装器 packageInstall,包卸载packageruninstall

intent.setData(Uri.pare(“package:” + 应用程序包名))

卸载完之后记得更新list集合,更新适配器.

但是不确定用户是否点了卸载,所以要通过广播获取消息.

并且需要通过代码注册,因为这个广播只在应用管理生效.

要记得addDataSchme(“package”)

接收完广播之后,更新了集合适配器,要记得关闭广播

异常:ConcurrentModificationException,并发访问异常错误

因为使用增强for循环去删除集合中的元素,所以会出并发修改异常.

额外:系统应用是不允许卸载的,所以遍历用户应用集合就可以了.

1.2.应用程序的开启:本质是打开这个应用的入口activity.

当一个activity的清单文件中,意图过滤器有

<action  android:name=”android.intent.action.MAIN”/>

<action  android:name=”android.intent.category.LANUCHER”/>

//找关系,得到特性.

packageManager pm中

Intent intent = pm.getLanuchIntentForPackage(包名)//如果对应的应用程序activity配置了上面的属性,就返回这个前门activity,如果没有activity配置这个属性,就返回为null;

1.3.应用程序的分享功能:打开系统的短信,给好友发送信息(或者QQ,微信,微博之类)

市面上一些即时通讯,或者社交类的应用程序,都重写了分享的action,如果是按发短信的方式分享,这些程序都会被列出来.

短信应用中,发短信的activity,ComposeMessageActivity,根据下面意图过滤器的类型,可以发送不同的信息.有图片,视频,文字.

设置完intent的属性,把要发送的文本放到intent.putExtra(intent.EXTRA_TEXT,.......);

1.4.应用程序的信息功能:实际上是打开系统的应用程序信息界面

在setting的系统源码中配置清单的InstalledAppDetails

如果不知道怎么写意图信息,就找一个类型的软件,打开它这个功能,会在日志中出现.

Intent intent = new Intent(“android.setting.APPLICATION_DETATLS_SETTINGS”);

Intent.addCategory(intent.Category.DEFAULT)//设置默认的Category

intent.setData(Uri.parse(“package:” + 包名));

2.进程管理

2.1 ui界面标题参考布局

ActivityManager am 进程管理器

①通过进程管理器 获取当前正在运行的进程.

am.getRunningAppProcesses()//返回当前运行的 APP集合

②获取可用的内存空间

am.getMemoryInfo(MemoryInfo outinfo)//对参数保存内存信息概要,

outinfo.avaiMem(系统可用内存空间).tatalMem(系统全部的内存空间)

可用内存返回是Long类型,需要转换成mb形式formatter

③创建一个新的信息获取类(获取信息的放在engine包下):ProcessInfoProvider

获取所有进程信息的数据.(需要一个实体类保存信息)

参考方法名getRunningProcessInfos();

实体类名:ProcessInfo

需要保存的信息:应用程序名label,图标icon,内存占用大小,应用程序包名packageName.

区分是否是用户和系统进程(判断是用户程序还是系统程序即可);

//通过am得到正在运行应用程序的集合.

getRunningAppProcesses();//返回正在运行的应用程序的集合,

每一个对象info

info.importance //进程的优先级

Info.pid //进程id,进程的唯一标识

info.processName //进程名,实际上就是应用程序的包名

//其它信息就跟前面获取软件信息应用,拿到包名>>拿到包信息>>拿到想要的信息

PackageManager pm

pm.getPackageInfo(包名,0(附加可选标记))//返回一个包信息Packageinfo packinfo

Packinfo.applicationInfo.xxxx//对应的信息.

am.getProcessMemory(int[]{})//通过一个保存多个进程pid返回对应多个进程信息.

返回的进程信息.getTotalPrivateDirty()//返回的是kb,要*1024转换成byte方便计算.

最后把每个封装对象放到List集合中,返回给调用者.

安卓系统中的进程有的不是app应用,像system,多媒体,内核应用,音频播放框架应用并不是由纯java编写的,还有c的构成,所以它们可能并没有apk的名字.

//在通过getPakcagerInfo获取包信息的时候,如果是这些进程就会出异常,根据这一点在Catch代码块中,给它设置一个名称(packname)和默认图片.

item条目参考ui

④其它类似应用程序管理器,拆分小集合,增加提醒小条目.holder优化,复用convert对象等.

3 带勾选框ListView的处理

List中如果有Button,Check这一类抢焦点的控件,会把焦点从条目上抢走,这样会导致ListView的条目点击事件效果失效,一般在开发中把这些抢焦点的控件CLickable = “false”,focusable=”false”

不可被点击,也不会获取到焦点

给进程应用对象封装类增加一个checkbox的布尔变量,用来判断是否被选中了(也可以保存在一个集合中,但是用户会希望这些被勾选的应用,再以后也能被默认勾选,所以封装起来比较方便)

在ListView的点击事件中,lv.getItemPosition(position);//得到被点击的条目对象.

//返回的对象为null

因为自定义适配器时,getItem()方法返回为null,所以获取的值也为null

所以可以在这个方法里返回被点击的对象.

在点击事件中,获取到这个对象,同时获取到CheckBox对象,点击之后就设置对应的参数.

但是会出现复用历史缓存的bug,在这里就需要在holder里增加一个checkbox变量,在适配器返回view的时候,对这个 checkBox进行赋值.

4,进程管理的进程清理

点击按钮之后清理进程.

①循环遍历集合,判断进程是否被选中.

②通过进程管理器 ActivityManager.killBackgroundProcesses(包名);

//清理完之后需要刷新界面,重新获取数据

③需要权限:KILL_BACKGROUND_PROCES

5,进程管理的细节

①全选和反选:

全选:遍历集合.全部设置为true,通知数据适配器更新数据

反选:遍历集合,全部设置为原来的状态取反,然后更新数据.

额外:无法清除的进程,系统进程,系统ui进程,前台进程,killBackgroundProcess是清理后台进程.

在开发者看来能理解,但是用户不能理解.

②一键清理的清理效果,

只要全部清理,就把所有进程在界面的显示给清理掉(傻逼用户)(市面上360的欺骗效果是比较好的,它甚至会判断你最近的清理时间,如果太近的话,就直接提示为空)

一键清理完后,把用户勾选的条目给移除掉(保存在一个集合Kill中,方便最后Toast中显示)

Toast:清理了kill.size()个进程,释放了Kill中元素占用内存相加之和.

更改标题,运行中进程和内存数量两个参数.可以通过两个成员变量去保存它们

然后把这两个参数与上面移除集合中的数据相减即可(减去进程数和占用内存总数).

从界面上移除条目,遍历kill集合,判断是属于哪个集合的,就从哪个集合去移除它,然后更新适配器.

额外:按常理来说,清理进程不应该清除自身应用的进程.

判断如果返回的View为自身应用的时候(根据包名判断),就隐藏checkBox勾选框.

点击事件里,也要做判断,如果符合就直接终止,return掉事件.全选,反选也是一样,跳过特殊选项.

wanandroid.com //安卓知识点总结

时间: 2024-08-04 04:32:59

手机卫士09_应用程序四种查看_ListView小标题_进程管理的相关文章

手机卫士08_应用程序的flags_PopupWidnow悬浮窗体

1,应用管理的ui界面 条目界面的参考ui ①然后显示在ListView上即可(记得优化,程序大小的格式化等) ②获取ListView需要花费一定时间,所以放在子线程,再通过runOnUiThread()更新ui即可 ③创建一个FrameLayout,包含ListView,然后设置一个等待框,在获取的时候显示在页面上. 2,应用程序的flags (可以区分应用程序的安装位置,系统和用户安装的程序等) 2.1 ①在遍历每一个包信息的时候packInfo.application.flags(可能是多

黑马程序员_IOS开发_Objective-C学习笔记_内存管理

1.内存管理概述 1.1什么是内存管理:内存管理是程序设计中常用的资源管理的一部分,每个计算机系统可供程序使用的内存都是有限的. 1.2为什么要使用内存管理:当我们的程序运行结束的时候,操作系统将回收其我们程序占用内存.但是,只要程序还在运行,它就会一直占用内存.如果不进行及时清理不用的内存,内存最终将被耗尽.每个程序都会使用内存,我们必须确保在需要的时候分配内存,而在程序运行结束时释放占用的内存.如果我们只分配而不释放内存,将发生内存泄漏. 1.3引用计数:1.3.1只有当你对一个对象了all

手机卫士-10

手机卫士-10 课1 窗口小部件widget widget是什么? 阅读文档doc develop--->API Guides---->App Widgets linux命令ps:查看进程 kill+进程pid:杀掉进程 窗口小部件widget使用方法 创建widget测试 依照文档实现窗口小部件widget 创建widget窗口小部件的步骤 1.创建一个新的实现类:父类是AppWidgetProvider //1.写一个类继承 AppWidgetProvider //因为这个类是一个广播接收

macOS四种Finder视图,所有这些视图都值得研究

Finder视图提供了四种查看Mac上存储的文件和文件夹的方法.大多数新的Mac用户倾向于仅使用以下四个Finder视图之一:图标,列表,列或Cover Flow / Gallery.在一个Finder视图中工作似乎不是一个坏主意.毕竟,您将非常熟练地使用该视图.但是从长远来看,学习如何使用每个Finder视图以及每个视图的优点和缺点可能会更有效率. 在本指南中,我们将研究四个Finder视图,如何访问它们,并学习使用每种视图的最佳时间. Finder视图 图标:每个文件或文件夹都由一个图标表示

Struts2 Web 资源获取的四种方式

Struts2 Web 资源获取一个有四种方式,两个大类 拦截器获取 Web 资源模式 静态对象获取 Web 资源模式 第一种:实现ServletRequestAware.ServletResponseAware.ServletContextAware接口 struts.xml <action name="FirstAction" class="Action.FirstAction"> <result name="success"

手机卫士12_软件锁,应用程序相关

1,软件锁(功能描述:当软件处于以加锁的列表中时,打开这个软件会跳转到密码输入界面,输入正确会跳转到软件界面,否则密码错误) ①ui参考 不使用fragment,采用布局叠加隐藏,点击一个文本,就显示一个界面(列表ListView),另一个布局界面隐藏起来(frameLayout帧布局实现). ②程序未加锁界面的展现 找到所有关心的控件,默认把所有的应用程序未加锁界面列表中. 参考条目ui 额外:加锁的小图标带有状态选择器,点击变换图片 横线可以考虑加个宽度为1的imageView; ③点击条目

手机卫士05_背景资源_listview优化_进程查看

1.1添加黑名单的ui 拦截类型修改为一组RadioGroup,里面三个RadioButton,RadioGroup可以指定排列方式 其它的都简单,记得定义好ID,顺便抽取点样式就可以了,最后两个Button可以设置状态选择器. 如果不确定LinearLayout有多高,就设置为0dp,权重为1,这样它会自己去填充空白,而不是覆盖. 1.2 电话号码的文本输入框 1.2.1安卓下特殊的图片资源 .9.png 图片 安卓自带的工具:sdk-tools-draw0-pathch 如果是在两侧选定黑点

Java程序猿必会的四种线程池

前言,对于Java程序猿来说,线程池是面试高频题,是我们必须掌握的一个技能,本篇文章主要给大家讲解四种线程池的使用. 线程池简介 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务. 线程池的工作机制: 在线程池的编程模式下,任务是提交给整个线程池,而不是直接提交给

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他