展会信息港展会大全

Android打印内存使用情况
来源:互联网   发布日期:2016-01-14 12:25:54   浏览:1740次  

导读:Android项目中内存溢出,故关注程序内存使用情况。写了个打印内存使用情况的脚本:import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i......

Android项目中内存溢出,故关注程序内存使用情况。

写了个打印内存使用情况的脚本:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

public class CdMemoryReader {

BufferedWriter writer;

/**

*

* @Description: TODO

* @param @param args args[0] : process name args[1]: execute time (int)

* args[2]: sleep time (long)

* @return void

* @throws @param args

* @date:2010/06/19 author:

*/

public static void main(String args[]) {

final String brower = "brower";

final String mms = "mms";

long sleeptime = 2000;

int times = 1000;

String procName = heco;

// CdMemoryReader cdMemoryReader = new CdMemoryReader() ;

System.out.println();

switch (args.length) {

default:

System.out.println("the args more than 3 is useless !");

System.out.println();

case 3:

try {

long sleepT = Long.parseLong(args[2]);

sleeptime = sleepT < 1000 ? 1000 : sleepT;

} catch (NumberFormatException e) {

System.out

.println("the args: " + args[2] + "is not a number .");

System.exit(0);

}

case 2:

try {

int exectime = Integer.parseInt(args[1]);

times = exectime <= 0 ? 1 : exectime;

} catch (NumberFormatException e) {

System.out

.println("the args: " + args[1] + "is not a number .");

System.exit(0);

}

case 1:

String name = args[0];

// 这里可以不做判断 直接使用传入的参数 我们是特定打印

if (name.contains(brower)) {

procName = brower;

} else if (name.contains(mms)) {

procName = mms;

} else {

System.out.println("the process name is wrong !!");

System.exit(0);

}

case 0:

System.out.println("proce name: " + procName);

System.out.println();

System.out.println("execute times: " + times);

System.out.println();

System.out.println("sleep time: " + sleeptime);

System.out.println();

new CdMemoryReader().cdAccess(sleeptime, times, 20, procName);

break;

}

}

private void cdAccess(long time, int times, int lines, String procName) {

Runtime rt = Runtime.getRuntime();

StringBuffer buffer = new StringBuffer();

String title = " PID Vss Rss Pss Uss cmdline";

System.out.println(title);

try {

writer = new BufferedWriter(new FileWriter(new File("D:/log.txt")));

writer.write(title + "/n");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

int printTime = 1;

for (int i = 0; i < times; i++) {

try {

String cmd = "adb shell procrank";

buffer.delete(0, buffer.length());

Process proc = rt.exec(cmd);

InputStream stderr = proc.getInputStream();

InputStreamReader isr = new InputStreamReader(stderr);

BufferedReader br = new BufferedReader(isr);

String line = null;

int j = 0;

while ((line = br.readLine()) != null) {

if (j < lines) {

if (line.contains(procName)) {

System.out.println(line + " PrintTime : "

+ printTime++ + " execute time : "

+ (i + 1));

buffer.append(line + "/n");

break;

}

}

j++;

}

// buffer.append("/n");

// buffer.append("/n");

writer.write(buffer.toString());

writer.flush();

// System.out.println("buffer.toString()" + buffer.toString());

} catch (Throwable t) {

t.printStackTrace();

}

try {

Thread.sleep(time);

} catch (InterruptedException ie) {

ie.printStackTrace();

}

}

try {

writer.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

日志文件默认放在D盘。

将uss的数据获取放在excel中可以生成以下的图,更直观些。

赞助本站

人工智能实验室
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港