android 进程信息,[Android]你不知道的Android进程化(1)--进程信息

这里是一个全新的系列--进程化

组件化模块化延伸后,还能到达进程化。

当你能活用组件化模块化,明白其中的关联之后,再深入探究下去,就会走到进程这一步。

从基础出发,我们说一下进程信息,下面全部使用kotlin编写的api。

获取内存容量

fun getTotalMemSize():Long{

var size=0L

//系统内存文件

val file = File("/proc/meminfo")

try {

val buffer = BufferedReader(InputStreamReader(FileInputStream(file)))

var memInfo = buffer.readLine()

val startIndex = memInfo.indexOf(":")

val endIndex =memInfo.indexOf("k")

memInfo = memInfo.substring(startIndex+1,endIndex).trim()

size = memInfo.toLong()

size *= 1024

buffer.close()

}catch (e:IOException){

e.printStackTrace()

}

return size

}

获取可用内存

fun getAviableMemSize(context:Context):Long{

val am = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

var mi = ActivityManager.MemoryInfo()

am.getMemoryInfo(mi)

return mi.availMem

}

获取当前进程id

fun getCurrentProcessId():Int{

return android.os.Process.myPid()

}

获取当前进程名

fun getCurrentProcessName():String{

var processName = UNKNOWN_PROCESS_NAME

try {

val file = File("/proc/"+ getCurrentProcessId()+"/cmdline")

val buffer = BufferedReader(FileReader(file))

processName = buffer.readLine().trim()

buffer.close()

}catch (e:Exception){

e.printStackTrace()

}

return processName

}

fun getCurrentProcessName():String{

var processName = UNKNOWN_PROCESS_NAME

try {

val file = File("/proc/"+ getCurrentProcessId()+"/cmdline")

val buffer = BufferedReader(FileReader(file))

processName = buffer.readLine().trim()

buffer.close()

}catch (e:Exception){

e.printStackTrace()

}

return processName

}

获取进程名

fun getCurrentProcessName(pid:Int):String{

var processName = UNKNOWN_PROCESS_NAME

try {

val file = File("/proc/"+ pid+"/cmdline")

val buffer = BufferedReader(FileReader(file))

processName = buffer.readLine().trim()

buffer.close()

}catch (e:Exception){

e.printStackTrace()

}

return processName

}

fun getProcessName(context:Context,pid:Int):String{

var processName = getCurrentProcessName(pid)

if (UNKNOWN_PROCESS_NAME .equals(processName)){

val am = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

val runningApps = am.runningAppProcesses

if (runningApps!=null){

for (info in runningApps){

if(info.pid == pid) return info.processName

}

}

}

return processName

}

使用命令获取adb手机进程

连接电脑,使用adb shell连接手机。

然后使用ps可以查看全部进程的信息。

这里请注意linux目录中有个/proc的目录,这里记载运行的进程,如果没有root手机取得最高权限是无法查看到进程信息的。

2c93765639eaf107c9704319683035fe.png

image.png

通过代码获取全部的进程信息

这里需要使用ActivityManager 和PackageManager获取运行进程信息的列表

在5.0以前使用一下的方法来获取

```

/**

* 获取所有进程信息(5.0以前)

*/

fun getTaskInfos(context:Context):List?{

val activityManager:ActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值