下面代码测试理解 android ANR 问题产生的原因,主线程,和new Thread() 的思考:
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class HelloAndroidActivity extends Activity {
private String LOG_TAG = "HelloAndroid";
static final int HANDLER_TEST = 1;
Handler myHandler = new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case HANDLER_TEST:
//Log.w(LOG_TAG, "I'm in handler test !!!");
while(true)
{
//do nothing !!!
}
//break;
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Thread thr = new Thread(new Runnable(){
public void run()
{
Log.e(LOG_TAG, "I'm in new thread !!!");
while(true)
{
// do nothing !!!
myHandler.sendEmptyMessage(HANDLER_TEST);
}
}
});
thr.start();
/*while(true)
{
//Log.v(LOG_TAG, "I'm in while loop !!!");
}*/
}
}
本文通过一个具体的代码示例,深入探讨了Android应用中ANR(应用程序无响应)问题的产生原因,特别是关于主线程阻塞及后台线程与Handler交互不当的情况。通过对代码的分析,帮助读者理解如何避免ANR问题。
912

被折叠的 条评论
为什么被折叠?



