android里常用的几个性能指标获取方法(纯代码)

分享几个自己用过的获取app性能几个性能指标的代码

获取对应进程内存占用信息:

 1     public void MemMonitor(){
 2
 3
 4        new Thread() {
 5                public void run() {
 6                    final ActivityManager ActivityList=(ActivityManager)getApplicationContext().getSystemService(ACTIVITY_SERVICE);
 7                    try {
 8                        Runtime.getRuntime().exec("am start --user 0 -n 包名/mainactivity名");
 9                        starttime=System.currentTimeMillis();
10
11                    } catch (IOException e) {
12                        Log.e("baih","启动应用失败");
13                    }
14                    while (true) {
15                        Log.e("baih", "开始计算.....");
16                        ActivityManager.MemoryInfo Mem1 = new ActivityManager.MemoryInfo();
17                        ActivityList.getMemoryInfo(Mem1);
18                        Long MemSize = Mem1.availMem;
19                        Long Mem12=Mem1.threshold;
20                        String leftMemSize = Formatter.formatFileSize(getBaseContext(), MemSize);
21                        String leftMemSize1 = Formatter.formatFileSize(getBaseContext(), Mem12);
22
23                        //获取受控极限堆值,获取非受控极限堆值
24                        int i=ActivityList.getMemoryClass();//受控堆
25                        int y=ActivityList.getLargeMemoryClass();//非受控堆
26
27                        //计算进程内存占用
28                        List<ActivityManager.RunningAppProcessInfo> AppList = ActivityList.getRunningAppProcesses();
29                        for (ActivityManager.RunningAppProcessInfo am : AppList) {
30                            if (am.processName.equals("包名")) {
31                                long startedtime=System.currentTimeMillis();
32                                long time=startedtime-starttime;
33                                Log.e("baih","启动时间为:"+time+"MS");
34                                int[] CMpid=new int[]{am.pid};
35                                Debug.MemoryInfo[] MemInfo = ActivityList.getProcessMemoryInfo(CMpid);
36                                AppPid=am.pid;
37                                double MemorySize1 = MemInfo[0].dalvikPrivateDirty / 1024.0;
38                                int temp = (int) (MemorySize1 * 100);
39                                MemorySize1 = temp / 100.0;
40                                String ProInfo = "";
41                                ProInfo += "本机内存阀值:" + i + "MB\n  " +
42                                        "程序包名:" + am.processName + "   " + "\nPID:" + am.pid
43                                        + "  " + "\n内存占用:" + MemorySize1 + "MB\n" + "\r\n";
44                                Log.e("baih", ProInfo);
45                                if(AppPid!=0)
46                                {
47                                    Cpuinfo();//调用计算CPU占用率函数
48                                }
49
50                                Mem1 = null;
51                                System.gc();
52                                break;
53                            } else {
54                                Log.e("baih", "被测应用未运行");
55                                Mem1 = null;
56                                System.gc();
57                                break;
58                            }
59                        }
60                        try {
61                            Thread.sleep(5000);
62                        } catch (InterruptedException e) {
63                            // TODO Auto-generated catch block
64                            e.printStackTrace();
65                        }
66                    }
67                }
68            }.start();
69
70    }

获取进程CPU占用率:

    //计算CPU总使用时间
    private static long getTotalCpuTime() { // 获取系统总CPU使用时间
        String[] cpuInfos = null;
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("/proc/stat")), 1000);
            String load = reader.readLine();
            reader.close();
            cpuInfos = load.split(" ");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        long totalCpu = Long.parseLong(cpuInfos[2])
                + Long.parseLong(cpuInfos[3]) + Long.parseLong(cpuInfos[4])
                + Long.parseLong(cpuInfos[6]) + Long.parseLong(cpuInfos[5])
                + Long.parseLong(cpuInfos[7]) + Long.parseLong(cpuInfos[8])+Long.parseLong(cpuInfos[9])+Long.parseLong(cpuInfos[10]);
        //Log.e("baih", "CPU总使用时间:" + totalCpu + "======" + op);

        return totalCpu;
    }

    //计算进程使用CPU时间
    private static long getAppCpuTime() { // 获取应用占用的CPU时间
        String[] cpuInfos = null;
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    new FileInputStream("/proc/" +AppPid + "/stat")), 1000);
            String load = reader.readLine();
            reader.close();
            cpuInfos = load.split(" ");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        long appCpuTime = Long.parseLong(cpuInfos[13])
                + Long.parseLong(cpuInfos[14]) + Long.parseLong(cpuInfos[15])
                + Long.parseLong(cpuInfos[16]);
        //Log.e("baih", "应用使用CPU时间:" + appCpuTime);
        return appCpuTime;
    }

    //计算进程占用CPU率
    public void Cpuinfo(){    //计算CPU占用率

        new Thread(){
            public void run(){
                    long TotalCpu1 = getTotalCpuTime();
                    long AppCpu1 = getAppCpuTime();

                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    long TotalCpu2 = getTotalCpuTime();
                    long AppCpu2 = getAppCpuTime();

                    long CpuInfo = 100 * (AppCpu2 - AppCpu1) / (TotalCpu2 - TotalCpu1);
                    Log.e("baih", "CPU占用率=" + CpuInfo + "%");

                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
        }.start();
    }

获取应用启动时间:

    public void StartTime(){    //计算启动时间
        ActivityManager ac1=(ActivityManager)getApplicationContext().getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> Applist1=ac1.getRunningAppProcesses();
        while (true) {
            for (ActivityManager.RunningAppProcessInfo mc1 : Applist1) {
                if (mc1.processName.equals("包名")) {
                    startedtime = System.currentTimeMillis();
                    continue;
                } else {
                    starttime = System.currentTimeMillis();
                }
            }

            time = startedtime - starttime;

            Log.e("baih", "启动时间为:" + time + "ms");
        }

    }
时间: 2024-12-21 18:49:09

android里常用的几个性能指标获取方法(纯代码)的相关文章

批量插入数据, 将DataTable里的数据批量写入数据库的方法

大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql: adapter.update()批量更新 MySqlBulkLoader, 这个是从文件里边到的, 有个实现是先将DATATable编程CSV文件, 在用MySqlBulkLoader导入MySql 参考文章: http://theonetechnologies.com/outsourcing/

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基

Android中常用的五种数据存储方式

第一种: 使用SharedPreferences存储数据 适用范围: 保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口 令密码等 核心原理: 保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息.通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name

android开发常用组件和第三方库(二)

TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending, github搜索:https://github.com/search 目录 UI UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其它 动画 网络相关 响应式编程 地图 数据库 图像浏览及处理 视频音频处理 测试及调试 动态更新热更新 消息推送 完整项目 插件 出名框架 其他 好的文章 收集android上开源的酷炫的交互动

android里单例对象和某些数据被释放的问题

接触正式的android开发已经有一段时间了,项目的第一个版本终于快完成了.有一次自己在测试的时候,把自己的android项目切到后台,同时打开了几个应用之后重新切回到自己的app,发现报错了.经过排查,发现是自己的单例对象中的数据被释放掉了,也就是int变量的值 变成了0,string变量的值变成了null. 我的单例一开始是这样的(举例); public class UserInfo { private static UserInfo userInfo = null; private int

Android TableLayout 常用的属性介绍及演示

TableLayout经常用的属性是: 1.android:collapseColumns:以第0行为序,隐藏指定的列:把android:collapseColumns=0,2 意思是把第0和第2列隐藏 2.android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分:当LayoutRow里面的控件还没有布满布局 时,shrinkColumns不起作用,设置了shrinkColumns=0,1,2,布局完全没有改变,因为LayoutRow里面还剩足够的空 间.当Layo

Android Studio常用插件

Android Studio常用插件 转载请注明出处:http://blog.csdn.net/crazy1235/article/details/48598803 不得不承认,Android Studio越用越爽.其代码提示和搜索功能相当强大,非常智能.颜色.图片在布局和代码中可以实时预览. 开发的过程中使用一些插件可以事半功倍,下面介绍一些博主开发过程中常用到的一些as插件供大家参考. Android Studio常用插件 ButterKnife codota Genymotion 安装HA

android/IOS常用图片上传的两种方式

android/IOS常用图片上传的两种方式: 1.上传到服务器的文件服务器(FileServer) 原理:上传到文件服务器的方式是先在服务器端搭建文件服务器,配置好路径(url),该路径是我们待会上传图片的路径,配置成功后便通过http+post的模式上传到文件服务器,同时文件服务器将返回一个图片ID,这个ID就是图片的唯一标识,并将该ID写入数据库保存,当需要下载该图片时只需要将此ID带上即可. 两个核心问题: (1)服务端:配置FileServer,并写处理响应上传图片的代码,这个值得去网

Android开发常用代码片段

拨打电话 public static void call(Context context, String phoneNumber) { context.startActivity( new Intent(Intent.ACTION_CALL, Uri.parse( "tel:" + phoneNumber))); } 跳转至拨号界面 public static void callDial(Context context, String phoneNumber) { context.st