文章目录
ANR 的模拟
ANR 的模拟,需要两步:
创造 ANR 的环境
触发 ANR
一、创造 ANR 的环境
产生 ANR 的环境是主线程阻塞,我们只要造成主线程阻塞即可。
可通过以下方式来造成主线程阻塞。
1.1 sleep
public void sleepTest() {
SystemClock.sleep(100000);
}
复制代码
1.2 wait
public void waitTest() {
String s = "";
synchronized (s) {
try {
s.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
复制代码
1.3 synchronized
public void synchronizedTest() {
new Thread(new Runnable() {
@Override
public void run() {
synchronizedInThread();
}
}).start();
runOnUiThread(new Runnable() {
@Override
public void run() {
synchronizedInMain();
}
});
}
public synchronized void synchronizedInThread() {
SystemClock.sleep(30000);
}
public synchronized void synchronizedInMain() {
}
复制代码
1.4 staticSynchronized
public void staticSynchronizedTest() {
new Thread(new Runnable() {
@Override
public void run() {
Util.get();
}
}).start();
Util.get();
}