日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手机卫士09_应用程序四种查看_ListView小标题_进程管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
手機(jī)衛(wèi)士09_應(yīng)用程序四種查看_ListView小標(biāo)題_進(jìn)程管理

1.懸浮窗體的功能實(shí)現(xiàn):

1.1.應(yīng)用程序的卸載: 包安裝器 packageInstall,包卸載packageruninstall

intent.setData(Uri.pare(“package:”?+ 應(yīng)用程序包名))

卸載完之后記得更新list集合,更新適配器.

但是不確定用戶是否點(diǎn)了卸載,所以要通過(guò)廣播獲取消息.

并且需要通過(guò)代碼注冊(cè),因?yàn)檫@個(gè)廣播只在應(yīng)用管理生效.

要記得addDataSchme(“package”)

接收完廣播之后,更新了集合適配器,要記得關(guān)閉廣播

?

異常:ConcurrentModificationException,并發(fā)訪問(wèn)異常錯(cuò)誤

因?yàn)槭褂迷鰪?qiáng)for循環(huán)去刪除集合中的元素,所以會(huì)出并發(fā)修改異常.

額外:系統(tǒng)應(yīng)用是不允許卸載的,所以遍歷用戶應(yīng)用集合就可以了.

?

1.2.應(yīng)用程序的開啟:本質(zhì)是打開這個(gè)應(yīng)用的入口activity.

當(dāng)一個(gè)activity的清單文件中,意圖過(guò)濾器有

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

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

//找關(guān)系,得到特性.

packageManager pm

Intent intent = pm.getLanuchIntentForPackage(包名)//如果對(duì)應(yīng)的應(yīng)用程序activity配置了上面的屬性,就返回這個(gè)前門activity,如果沒(méi)有activity配置這個(gè)屬性,就返回為null;

?

1.3.應(yīng)用程序的分享功能:打開系統(tǒng)的短信,給好友發(fā)送信息(或者QQ,微信,微博之類)

市面上一些即時(shí)通訊,或者社交類的應(yīng)用程序,都重寫了分享的action,如果是按發(fā)短信的方式分享,這些程序都會(huì)被列出來(lái).

短信應(yīng)用中,發(fā)短信的activity,ComposeMessageActivity,根據(jù)下面意圖過(guò)濾器的類型,可以發(fā)送不同的信息.有圖片,視頻,文字.

設(shè)置完intent的屬性,把要發(fā)送的文本放到intent.putExtra(intent.EXTRA_TEXT,.......);

?

1.4.應(yīng)用程序的信息功能:實(shí)際上是打開系統(tǒng)的應(yīng)用程序信息界面

setting的系統(tǒng)源碼中配置清單的InstalledAppDetails

如果不知道怎么寫意圖信息,就找一個(gè)類型的軟件,打開它這個(gè)功能,會(huì)在日志中出現(xiàn).

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

Intent.addCategory(intent.Category.DEFAULT)//設(shè)置默認(rèn)的Category

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

?

2.進(jìn)程管理

2.1 ui界面標(biāo)題參考布局

?

ActivityManager am 進(jìn)程管理器

①通過(guò)進(jìn)程管理器 獲取當(dāng)前正在運(yùn)行的進(jìn)程.

am.getRunningAppProcesses()//返回當(dāng)前運(yùn)行的 APP集合

②獲取可用的內(nèi)存空間

am.getMemoryInfo(MemoryInfo outinfo)//對(duì)參數(shù)保存內(nèi)存信息概要,

outinfo.avaiMem(系統(tǒng)可用內(nèi)存空間).tatalMem(系統(tǒng)全部的內(nèi)存空間)

可用內(nèi)存返回是Long類型,需要轉(zhuǎn)換成mb形式formatter

③創(chuàng)建一個(gè)新的信息獲取類(獲取信息的放在engine包下):ProcessInfoProvider

獲取所有進(jìn)程信息的數(shù)據(jù).(需要一個(gè)實(shí)體類保存信息)

參考方法名getRunningProcessInfos();

實(shí)體類名:ProcessInfo

需要保存的信息:應(yīng)用程序名label,圖標(biāo)icon,內(nèi)存占用大小,應(yīng)用程序包名packageName.

區(qū)分是否是用戶和系統(tǒng)進(jìn)程(判斷是用戶程序還是系統(tǒng)程序即可);

//通過(guò)am得到正在運(yùn)行應(yīng)用程序的集合.

getRunningAppProcesses();//返回正在運(yùn)行的應(yīng)用程序的集合,

每一個(gè)對(duì)象info

info.importance //進(jìn)程的優(yōu)先級(jí)

Info.pid //進(jìn)程id,進(jìn)程的唯一標(biāo)識(shí)

info.processName //進(jìn)程名,實(shí)際上就是應(yīng)用程序的包名

//其它信息就跟前面獲取軟件信息應(yīng)用,拿到包名>>拿到包信息>>拿到想要的信息

PackageManager pm

pm.getPackageInfo(包名,0(附加可選標(biāo)記))//返回一個(gè)包信息Packageinfo packinfo

Packinfo.applicationInfo.xxxx//對(duì)應(yīng)的信息.

am.getProcessMemory(int[]{})//通過(guò)一個(gè)保存多個(gè)進(jìn)程pid返回對(duì)應(yīng)多個(gè)進(jìn)程信息.

返回的進(jìn)程信息.getTotalPrivateDirty()//返回的是kb,*1024轉(zhuǎn)換成byte方便計(jì)算.

?

最后把每個(gè)封裝對(duì)象放到List集合中,返回給調(diào)用者.

安卓系統(tǒng)中的進(jìn)程有的不是app應(yīng)用,system,多媒體,內(nèi)核應(yīng)用,音頻播放框架應(yīng)用并不是由純java編寫的,還有c的構(gòu)成,所以它們可能并沒(méi)有apk的名字.

//在通過(guò)getPakcagerInfo獲取包信息的時(shí)候,如果是這些進(jìn)程就會(huì)出異常,根據(jù)這一點(diǎn)在Catch代碼塊中,給它設(shè)置一個(gè)名稱(packname)和默認(rèn)圖片.

item條目參考ui

?

④其它類似應(yīng)用程序管理器,拆分小集合,增加提醒小條目.holder優(yōu)化,復(fù)用convert對(duì)象等.

?

3 帶勾選框ListView的處理

?

List中如果有Button,Check這一類搶焦點(diǎn)的控件,會(huì)把焦點(diǎn)從條目上搶走,這樣會(huì)導(dǎo)致ListView的條目點(diǎn)擊事件效果失效,一般在開發(fā)中把這些搶焦點(diǎn)的控件CLickable = “false”,focusable=”false”

不可被點(diǎn)擊,也不會(huì)獲取到焦點(diǎn)

給進(jìn)程應(yīng)用對(duì)象封裝類增加一個(gè)checkbox的布爾變量,用來(lái)判斷是否被選中了(也可以保存在一個(gè)集合中,但是用戶會(huì)希望這些被勾選的應(yīng)用,再以后也能被默認(rèn)勾選,所以封裝起來(lái)比較方便)

?

在ListView的點(diǎn)擊事件中,lv.getItemPosition(position);//得到被點(diǎn)擊的條目對(duì)象.

//返回的對(duì)象為null

因?yàn)樽远x適配器時(shí),getItem()方法返回為null,所以獲取的值也為null

所以可以在這個(gè)方法里返回被點(diǎn)擊的對(duì)象.

?

在點(diǎn)擊事件中,獲取到這個(gè)對(duì)象,同時(shí)獲取到CheckBox對(duì)象,點(diǎn)擊之后就設(shè)置對(duì)應(yīng)的參數(shù).

但是會(huì)出現(xiàn)復(fù)用歷史緩存的bug,在這里就需要在holder里增加一個(gè)checkbox變量,在適配器返回view的時(shí)候,對(duì)這個(gè) checkBox進(jìn)行賦值.

?

4,進(jìn)程管理的進(jìn)程清理

點(diǎn)擊按鈕之后清理進(jìn)程.

①循環(huán)遍歷集合,判斷進(jìn)程是否被選中.

②通過(guò)進(jìn)程管理器 ActivityManager.killBackgroundProcesses(包名);

//清理完之后需要刷新界面,重新獲取數(shù)據(jù)

③需要權(quán)限:KILL_BACKGROUND_PROCES

?

5,進(jìn)程管理的細(xì)節(jié)

①全選和反選:

全選:遍歷集合.全部設(shè)置為true,通知數(shù)據(jù)適配器更新數(shù)據(jù)

反選:遍歷集合,全部設(shè)置為原來(lái)的狀態(tài)取反,然后更新數(shù)據(jù).

?

額外:無(wú)法清除的進(jìn)程,系統(tǒng)進(jìn)程,系統(tǒng)ui進(jìn)程,前臺(tái)進(jìn)程,killBackgroundProcess是清理后臺(tái)進(jìn)程.

在開發(fā)者看來(lái)能理解,但是用戶不能理解.

②一鍵清理的清理效果,

只要全部清理,就把所有進(jìn)程在界面的顯示給清理掉(傻逼用戶)(市面上360的欺騙效果是比較好的,它甚至?xí)袛嗄阕罱那謇頃r(shí)間,如果太近的話,就直接提示為空)

一鍵清理完后,把用戶勾選的條目給移除掉(保存在一個(gè)集合Kill中,方便最后Toast中顯示)

?

Toast:清理了kill.size()個(gè)進(jìn)程,釋放了Kill中元素占用內(nèi)存相加之和.

更改標(biāo)題,運(yùn)行中進(jìn)程和內(nèi)存數(shù)量?jī)蓚€(gè)參數(shù).可以通過(guò)兩個(gè)成員變量去保存它們

然后把這兩個(gè)參數(shù)與上面移除集合中的數(shù)據(jù)相減即可(減去進(jìn)程數(shù)和占用內(nèi)存總數(shù)).

?

從界面上移除條目,遍歷kill集合,判斷是屬于哪個(gè)集合的,就從哪個(gè)集合去移除它,然后更新適配器.

額外:按常理來(lái)說(shuō),清理進(jìn)程不應(yīng)該清除自身應(yīng)用的進(jìn)程.

判斷如果返回的View為自身應(yīng)用的時(shí)候(根據(jù)包名判斷),就隱藏checkBox勾選框.

點(diǎn)擊事件里,也要做判斷,如果符合就直接終止,return掉事件.全選,反選也是一樣,跳過(guò)特殊選項(xiàng).

?

wanandroid.com //安卓知識(shí)點(diǎn)總結(jié)

?

posted on 2016-06-18 22:58 抓根寶 閱讀(...) 評(píng)論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/adventurer/p/5597115.html

總結(jié)

以上是生活随笔為你收集整理的手机卫士09_应用程序四种查看_ListView小标题_进程管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。