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

手机卫士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 //安卓知识点总结

 

posted on 2016-06-18 22:58 抓根宝 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/adventurer/p/5597115.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pandas:根据行间差值进行数据合并

1. 问题描述 在处理用户上网数据时&#xff0c;用户的上网行为数据之间存在时间间隔&#xff0c;按照实际情况&#xff0c;若时间间隔小于阈值&#xff08;next_access_time_app&#xff09;&#xff0c;则可把这几条上网行为合并为一条行为数据&#xff1b;若时间间隔大于阈值…

Flask学习 一 基本结构

-from flask import Flaskfrom flask import Flask,render_template-from flask import request-from flask import make_response-from flask import abort-from flask import redirect-# __name__参数决定程序的根目录app Flask (__name__)-# app.route (/)-# def hello_wor…

java8的路径_什么是路径?

# 什么是路径&#xff1f;文件系统以某种形式的媒体(通常为一个或多个硬盘驱动器)存储和组织文件&#xff0c;使得它们可以容易地被检索。目前使用的大多数文件系统将文件存储在树形(或分层)结构中。在树的顶部是一个(或多个)根节点。在根节点下&#xff0c;有文件和目录(Micro…

为什么toString方法可以用来区分数组和对象?

首先大家都应该知道在javascript中只有是对象都存在toString方法&#xff0c;将调用该方法的值转换为字符串返回&#xff0c;如下&#xff1a; var arr [1, 2, 3];console.log(arr.toString()); //1,2,3 但对象的toString方法和其他优点不同&#xff0c;其返回的是类似 [objec…

平安 开源 数据库 实践_刻意的实践-成为开源

平安 开源 数据库 实践by Anthony Ng由Anthony Ng 刻意的实践-成为开源 (Deliberate Practice — Becoming an Open Sourcerer) I recently finished reading Cal Newport’s book, So Good They Can’t Ignore You. It’s a quick read, and it introduced me to the concept…

更新Composer依赖报错处理Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe...

更新Composer依赖报错处理 Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRepository::search() must be compatible with Composer\Repository\RepositoryInterface::search($query, $mode 0, $type NULL) in C:\Users\Arthur\AppData\Ro…

解析su,su -,sudo的区别

2019独角兽企业重金招聘Python工程师标准>>> 本人以前一直习惯直接使用root&#xff0c;很少使用su&#xff0c;前几天才发现su与su -命令是有着本质区别的&#xff01; 大部分Linux发行版的默认账户是普通用户&#xff0c;而更改系统文件或者执行某些命令&#xff…

java 前置通知_spring aop中的前置通知

fixassetServicemyInterceptormyInterceptor2在上面的配置文件中 我配置了两个interceptor &#xff0c;这两个interceptor的invoke方法中的逻辑是一样的。public Object invoke(MethodInvocation invo) throws Throwable {//自己的横切逻辑log....invo.proceed()}我想请教的问…

Java并发编程艺术读书笔记

1、多线程在CPU切换过程中&#xff0c;由于需要保存线程之前状态和加载新线程状态&#xff0c;成为上下文切换&#xff0c;上下文切换会造成消耗系统内存。所以&#xff0c;可合理控制线程数量。 如何控制&#xff1a; &#xff08;1&#xff09;使用ps -ef|grep appname&#…

您可能不需要翻译您JavaScript

by Alex Ewerlf由AlexEwerlf 您可能不需要翻译您JavaScript (You might not need to transpile your JavaScript) Popular guides like YouMightNotNeedJQuery.com and You Don’t Need Lodash/Underscore have challenged common industry practices.诸如YouMightNotNeedJQue…

java maven 操作 收集的一些命令

maven打包&#xff1a; mvn clean package -Dmaven.test.skiptrue 运行jar: java -jar target/spring-boot-scheduler-1.0.0.jar 这种方式关掉控制台就不可以访问&#xff0c;现在要后台运行的方式启动 nohup java -jar target/spring-boot-scheduler-1.0.0.jar & 清理并…

手机h5 java平台_H5 手机 App 开发入门:技术篇

1、手机 App 的技术栈手机 App 的技术栈可以分成三类原生 App 技术栈原生技术栈指的是&#xff0c;只能用于特定手机平台的开发技术。比如&#xff0c;安卓平台的 Java 技术栈&#xff0c;iOS 平台的 Object-C 技术栈或 Swift 技术栈。混合 App 技术栈混合技术栈指的是开发混合…

《Java程序设计》学期总结

《Java程序设计》 学期总结 课程设计小组 -迦瓦栈队 团队博客 读书笔记汇总第一周第二周第三周第四周第五周第六周第七周第八周第九周第十周 实验报告汇总实验一实验二实验三实验四实验五 代码托管链接GitOSC 课程收获与不足 上了一学期的课&#xff0c;收获当然后很多&#xf…

012-- mysql的分区和分表

分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中。 mysql支持的分区类型包括Range、List、Hash、Key&#xff0c;其中Range比较常用&#xff1a; RANGE分区&#xff1a;基于属于一个给定连续区间的列值&#xff0c;把多行分配给分区。 LIST分区&#xff1a;类…

中科大计算机专业少实习_为什么很少有计算机科学专业的人?

中科大计算机专业少实习Hong Kong-based technology writer Dan Wang wrote a blog post exploring why so few people get degrees in computer science. And yes — it’s far fewer people than those who study other science and engineering fields.驻香港的技术作家王丹…

java犯的小错误_[Java教程]十个JavaScript中易犯的小错误,你中了几枪?

[Java教程]十个JavaScript中易犯的小错误&#xff0c;你中了几枪&#xff1f;0 2015-06-01 12:00:19序言在今天&#xff0c;JavaScript已经成为了网页编辑的核心。尤其是过去的几年&#xff0c;互联网见证了在SPA开发、图形处理、交互等方面大量JS库的出现。如果初次打交道&…

Kali渗透测试——利用metasploit攻击靶机WinXP SP1

搭建渗透测试环境 Kali攻击机 WinXP SP1 靶机 启动metasploit 跟windows RPC相关的漏洞 内部提供的漏洞攻击 靶机winxp sp1网络配置 查看虚拟机的NAT网段 配置WinXP SP1靶机的IP地址 执行漏洞利用 后漏洞利用&#xff1a;meterpreter> 靶机的信息 进程情况 查看到explorer.e…

创建响应式布局的优秀网格工具集锦《系列五》

在这篇文章中&#xff0c;我们为您呈现了一组优秀的网格工具清单。如果网页设计和开人员采用了正确的工具集&#xff0c;并基于一个灵活的网格架构&#xff0c;以及能够把响应图像应用到到设计之中&#xff0c;那么创建一个具备响应式的网站并不一定是一项艰巨的任务。enjoy! 您…

【iOS - 周总结】开发中遇到的小知识点(2018.12.10-2018.12.15)

1.WKWebview加载html文本图片过大&#xff0c;没有自适应屏幕宽高。 在用Webview加载html文本有时候会遇到加载的图片过大&#xff0c;不能自适应屏幕宽高的问题。那么如何解决这个问题&#xff1f;如何使图片自适应屏幕&#xff1f;很简单&#xff0c;只需要加一个js就可以。 …

如何使用Create React App DevOps自动化工作中所有无聊的部分

by James Y Rauhut詹姆士鲁豪(James Y Rauhut) 如何使用Create React App DevOps自动化工作中所有无聊的部分 (How I automate all of the boring parts of my job with Create React App DevOps) When you have responsibilities as one of the only designers — and possib…