android开发之内存CPU监控

本文介绍了如何在Android中进行内存和CPU的监控,包括通过adb命令和Android Studio进行基本监控,以及深入的性能分析定位。分享了一个监控指定应用CPU和内存的实现,涉及监控间隔和总时间的设置,并提供了效果图和核心代码示例,包括在Manifest文件中添加必要的权限。
摘要由CSDN通过智能技术生成

cpu,内存监控作为android性能测试的一部分,在日常工作中使用也比较频繁,一般测试人员都是直接adb命令输出结果或者android studio上查看内存,Cpu的趋势,再深入一点就是性能分析定位了。由于本人水平有限,就先分享个android apk 监控指定应用的cpu和内存。先附上两张效果图:



原理如下

输入需要监控的应用包名,输入监控的间隔时间,输入监控的总时间,点击监控就会执行监控命令,点击监控统计会在图标显示各项参数的最大值,最小值,平局值。点击监控详情会跳转到新的界面,展示详细的监控参数

代码如下

1.先在manifest文件加上如下权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2.MainActivity代码如下
package com.example.monitor;

import android.content.Intent;
import android.os.CountDownTimer;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainActivity extends AppCompatActivity {
    EditText editText_times,editText_min,editText_package;
    Button button_top,button_reporte,cpu_btn,start_app,start_time;
    TextView countDown,cpu_max,cpu_min,cpu_ave,rss_max,rss_min,rss_ave,vss_max,vss_min,vss_ave;
    TextView total_time,wait_time,completa_time;
    FileUtils fu=new FileUtils();
    List cpu,rss,vss=new ArrayList<String>();

    ListUtils lu=new ListUtils();

    private Handler handler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
   //监控详情按钮,点击后通过intent传值到新的activity
        cpu_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    cpu= fu.readcpu("/mnt/sdcard/topInfo.txt",editText_package);
                    rss= fu.readrss("/mnt/sdcard/topInfo.txt",editText_package);
                    vss=fu.readvss("/mnt/sdcard/topInfo.txt",editText_package);

                    String times=fu.read("/mnt/sdcard/totime.csv");
                    String totalTime=fu.read("/mnt/sdcard/totaltime.csv");

                    Intent intent = new Intent(MainActivity.this,TopDetailActivity.class);



                    intent.putExtra("times",times);
                    intent.putExtra("totalTime",totalTime);

                    intent.putStringArrayListExtra("cpu", (ArrayList) cpu);//key就是自己定义一个String的字符串就行了
                    intent.putStringArrayListExtra("vss", (ArrayList) vss);
                    intent.putStringArrayListExtra("rss", (ArrayList) rss);
                    startActivity(intent);
                } catch (Exception e) {
                    Toast toast=Toast.makeText(MainActivity.this, "监控文件被删除", Toast.LENGTH_SHORT);
                    toast.show();
                }
            }
        });


//监控报告按钮
        button_reporte.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread() {
                    @Override
                    public void run() {//在run()方法实现业务逻辑;
                        //...

                        //更新UI操作;
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                List<String>str_cpu= null;
                                List<String>str_vss= null;
                                List<String>str_rss= null;
                                try {
                                    str_cpu = fu.readcpu("/mnt/sdcard/topInfo.txt",editText_package);
                                    str_rss=fu.readrss("/mnt/sdcard/topInfo.txt",editText_package);
                                    str_vss=fu.readvss("/mnt/sdcard/topInfo.txt",editText_package);

                                    List cpu_info=lu.StrToInt(str_cpu);
                                    List rss_info=lu.StrToInt(str_rss);
                                    List vss_info=lu.StrToInt(str_vss);
                                    double ave=lu.listAverage(cpu_info);
                                    double ave1=lu.listAverage(rss_info);
                                    double ave2=lu.listAverage(vss_info);


                                    Log.i("cpuinfo", Collections.max(str_cpu));
                                    Log.i("cpuinfo", Collections.min(str_cpu));
                       
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值