【android,13】13.避免anr(application no response)的操作

来源:互联网 发布:软件疲劳强度测试 编辑:程序博客网 时间:2024/04/26 19:28

 

一、出现applicationno response 原因:

1、原因:

①、activity是在主线程里面被创建的,

activity里面的按钮控件的点击事件,

界面的显示 view对象内容的更改,

这些操作都是运行在主线程里面的.

主线程还处理Window.Callback, KeyEvent.Callback,

与窗体相关显示的回调函数, 还处理了与点击,键盘

等相关的点击事件.

所以当主线程阻塞久了就不能响应其他操作,就会报anr(application no response)异常。

 

二、为了避免应用程序出现anr的异常:

1.耗时的操作都不能放在主线程里面执行,要放在子线程中执行,这些操作。

  如以下操作:

   拷贝大的文件. 100M

  访问网络的操作

  阻塞式的请求. udp socket

例:

public class AnrActivityextends Activity {

   

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

    //按钮的点击事件:

    public void click(View view){

    newThread(){ //创建子线程:

        public void run() {

           

            System.out.println("睡眠10秒钟");

         System.out.println(Thread.currentThread().getName());

         //当前线程睡眠10秒钟

         try {

                Thread.currentThread().sleep(10000);

            }catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }; 

    }.start();

    }

}

 

 

 

 

 

 

1 0