【Android】使用Android Studio的工具Profiler分析线程

目的:创建多个Android线程,并使用Android Studio的Profiler工具验证分析。

工具:Android Studio

源码:https://gitee.com/guangwei_jiang/thread-test

Profiler官方指导文件:Android Profiler  |  Android 开发者  |  Android Developers (google.cn)

步骤:

1. 创建一个简单的多线程工程,或者使用本文的示例代码;

public class MainActivity extends AppCompatActivity{
    public static String TAG = "PID_TID_Test";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "MainActivity: Process ID: " + Os.getpid() + ", Parent Process ID:" + Os.getppid() + ", Thread ID: " + Os.gettid());

        myRunnable();
        myThread();
        myTimer();
    }

    private void myThread() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    Log.i(TAG, "myThread: Process ID: " + Os.getpid() + ", Parent Process ID:" + Os.getppid() + ", Thread ID: " + Os.gettid());
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    private void myRunnable() {
        new Runnable() {
            @Override
            public void run() {
                Log.i(TAG, "myRunnable: Process ID: " + Os.getpid() + ", Parent Process ID:" + Os.getppid() + ", Thread ID: " + Os.gettid());
            }
        }.run();
    }

    private void myTimer () {
        Timer timer= new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Log.i(TAG, "myTimer: id: " + Os.getpid() + ", Parent_ID:" + Os.getppid() + ", Thread ID: " + Os.gettid());
            }
        }, 10, 10);
    }


}

 2. 运行程序,打印如下log
从log中可以看到,myThread和myTimer创建的线程号分别为28761和28762,和主线程28707是不同的。

I/PID_TID_Test: MainActivity: Process ID: 28707, Parent Process ID:670, Thread ID: 28707
I/PID_TID_Test: myRunnable: Process ID: 28707, Parent Process ID:670, Thread ID: 28707
I/PID_TID_Test: myThread: Process ID: 28707, Parent Process ID:670, Thread ID: 28761
I/PID_TID_Test: myThread: Process ID: 28707, Parent Process ID:670, Thread ID: 28761
I/PID_TID_Test: myTimer: id: 28707, Parent_ID:670, Thread ID: 28762
I/PID_TID_Test: myThread: Process ID: 28707, Parent Process ID:670, Thread ID: 28761
I/PID_TID_Test: myTimer: id: 28707, Parent_ID:670, Thread ID: 28762

3. 下面使用Profiler工具同步分析

3.1 运行程序(Run->Profile "app"),选择"Profiler"窗口,点击"CPU"进入CPU页面如下,选择"CPU Profiling mode"为“Trace Java Methods”, 然后点击“Record”。

 3.2 录制5秒左右停止,得到下图,

3.3 查看Profiler中得到的Thread ID,和我们代码中得到的是对应的。Thread-2对应myThread创建的线程(ID 28761);Timer-0对应myTimer创建的线程(ID 28762); main对应MainActivity的主线程 (ID 28707).
下面截取Thread-2的图,供参考。

3.4 点击进入每个thread的内容,可以看到这段时间内呼叫的API及其他信息(如时序等),大家可以依据自己的代码和目的研究。

小结:

Profiler是Android Studio十分重要的系统分析工具,用好这个工具会对我们以后分析问题起到很大的帮助,希望这篇短文能引起更多人对Profiler的兴趣。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值