Cel*_*nHC 7 android android-anr-dialog
为什么我不能用这段代码强制Android ANR?没有日志消息或弹出.该应用程序只是懒洋洋地推出.
[UPDATE]
我甚至不能在View.setOnClickListener或BroadcastReceiver.onReceive上睡觉!
有诀窍吗?
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
Log.e("Test", "", e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用三星GT-6200L和Android 3.2
在onTouchEvent中尝试一下.在onCreate中,您的活动未完全运行
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG,"onTouchEvent");
while(true) {}
}
Run Code Online (Sandbox Code Playgroud)
ANR -WatchDog 项目有一个测试应用程序,可以以可靠的方式生成 ANR(与 ANR 一样可靠):该应用程序因死锁而挂起。
其要点:
准备一个锁对象作为活动中的私有字段:
final Object mutex = new Object();
有一个线程在关键部分执行某些工作,以及一个android.os.Handler根据同一锁发布工作的线程。
new Thread(new Runnable() {
@Override
public void run() {
synchronized (mutex) {
while (true) {
try {
Thread.sleep(60000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
synchronized (mutex) {
// Shouldn't happen
throw new IllegalStateException();
}
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)例如,将上述代码片段放入按钮单击处理程序中应该可以解决问题。
尝试使用:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int a=0;
while(true) {
a++;
}
}
Run Code Online (Sandbox Code Playgroud)
您的代码可能无法工作,因为它设置得太早,并且 Activity 可能尚未完全初始化和创建。使用上述代码,启动 Activity 并在屏幕上触摸/滑动,然后等待 ANR 对话框弹出。
| 归档时间: |
|
| 查看次数: |
5695 次 |
| 最近记录: |