在哪家公司建设网站好,电商网站建设计入什么科目,dedecms企业网站,wordpress主页手机卫士09_应用程序四种查看_ListView小标题_进程管理 1.悬浮窗体的功能实现: 1.1.应用程序的卸载: 包安装器 packageInstall,包卸载packageruninstall intent.setData(Uri.pare(“package:” 应用程序包名)) 卸载完之后记得更新list集合,更新适配器. 但是不确定用户是否点了… 手机卫士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