Android ANR异常解决方案
1,ANR异常的解释:
ANR(android not response)即应用程序无响应,在用户操作在5秒内没有响应的话就会出现ANR异常;
2,那为什么会出现ANR异常呢?
Android系统中处理用户操作的工作在主线程中执行,如果我们在主线程中执行很耗时的操作,并且导致用户的操作没有在5秒钟内得到响应,哪儿嘛就会导致ANR异常的出现。主线程休眠,那么再点击程序,必须等主线程睡醒后才会有反应。所以在主线程中不能行耗时操作,因为主界面会被阻塞。
3,解决方案:
凡是耗时操作都不要放在主线程里面,要单独开辟一个线程,然后在子线程中利用Handler传递消息,通知主线程更新UI主界面。比如连网的事情都要放在子线程里面。
解决代码(包括更新界面的操作,使用的是handler)
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView numTV; private Handler handler = new Handler(); private int i; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); numTV = (TextView) findViewById(R.id.numTV); } public void doSomething(View view) throws Exception { new Thread() { public void run() { for (i = 1; i < 20; i++) { handler.post(new Runnable() { public void run() { numTV.setText(i + ""); } }); System.out.println(i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }; }.start(); } public void toast(View view) { Toast.makeText(this, "云哥(马云)要来我们学校做演讲啦!", 0).show(); } }