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();
    }
}

原文地址:https://www.cnblogs.com/zhengjunfei/p/4716258.html