目的:创建多个Android线程,并使用Android Studio的Profiler工具验证分析。
工具:Android Studio
步骤:
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的兴趣。?
?
|