[android] 06_ANR异常

Android 4.0

ANR异常:

ANR 异常:
 
application not response. 应用程序无响应.
 
1、所有的操作系统的ui 死循环  不停检查是不是有新的消息
 
2、如果android系统发现主线程在单位时间内没有响应了.  接受不到新的消息. 不能响应新的
消息了.
 
3、主线程很重要:
    a) 更新ui
    b) 用户的点击事件.
    c) 线程被阻塞 应用程序就会报告anr的异常
 
4、避免ANR的异常:
     耗时的操作 ,不能把他写在主线程里面,写在单独子线程.

应用的响应性(Responsive)
Android中,应用的响应性被活动管理器(Activity Manager
和窗口管理器(Window Manager)这两个系统服务所监视。
当用户触发了输入事件(如键盘输入,点击按钮等),
如果应用6秒内没有响应用户的输入事件,那么,Android会认
为该应用无响应,便弹出ANRApplication No Response
对话框。如下图。

在正常情况下,Android程序会在一条单线程里运行。如果Activity要处理一件比较耗时的工作,应该交给子线程完成,否侧会因为主线程被阻塞,后面的用户输入事件因没能在5秒内响应,导致应用出现ANR对话框。

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void click(View view){
        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 
}