什么是ANR
来源:互联网 发布:ubuntu怎么打开输入法 编辑:程序博客网 时间:2024/05/05 01:13
耗时操作
1.什么是ANR
在应用程序的主线程中执行一段耗时的代码, 就有可能出现ANR异常.
耗时的代码未执行结束时, 界面会卡住, 用户对界面进行了操作, 10秒之后耗时代码如果还未结束, 就会出现ANR异常
* 2.怎么避免ANR
主线程中不要执行耗时的代码
如果一定要做耗时的事情, 开启新线程, 在新线程中执行
3.UI Thread
安卓手机中主线程负责刷新界面, 以及处理用户的操作
应用程序的界面都是由主线程创建的
界面的修改也只能在主线程中执行
** 4.Handler
有的时候我们需要执行一些耗时的代码, 会开启新线程, 这时又需要更新界面, 必须在主线程中操作, 那么就需要使用Handler来进行线程之间的通信
a.sendMessage():
新线程向主线程发送一个包含数据的消息, 主线程获取消息中的数据
在主线程中创建Handler子类对象, 重写handleMessage()方法
新线程中可以使用Handler的引用调用sendMessage()方法, 发送一个Message对象
只要执行了sendMessage()方法, 那么主线程会自动执行handleMessage()方法, 收到Message对象
public class SendMessageActivity extends Activity {private TextView tv;private Handler handler = new Handler(){public void handleMessage(Message msg) {// 该方法在sendMessage()方法之后执行, 形参就是发送过来的Message对象tv.setText(msg.obj + "");// 主线程更新界面}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);}public void go(View v) {new Thread() {public void run() {for (int i = 1; ; i++) {// Message msg = new Message();// 创建消息对象Message msg = handler.obtainMessage();// 从消息池中获取一个Messagemsg.obj = i;// 把数据放在消息对象中handler.sendMessage(msg);// 在新线程中发送消息对象, 主线程会自动执行handleMessage()方法System.out.println(i);SystemClock.sleep(1000);}}}.start();}}
b.post():
新线程向主线程发送一段代码, 主线程直接执行
在主线程中创建Handler对象
新线程中可以使用Handler调用post()方法发送一个Runnable对象
主线程会自动执行Runable的run()
ublic class PostActivity extends Activity {private TextView tv;private Handler handler = new Handler();private int i;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);}public void go(View v) {new Thread() {public void run() {for (i = 1; ; i += 2) {handler.post(new Runnable(){// 在新线程中使用Handler向主线程发送一段代码, 主线程自动执行run()方法public void run() {tv.setText(i + "");}});System.out.println(i);SystemClock.sleep(1000);}}}.start();}}
0 0
- 什么是ANR
- 什么是ANR
- 什么是 ANR?
- 什么是ANR,如何避免ANR
- 什么是ANR?如何避免ANR?
- 什么是ANR,如何避免?
- 什么是Anddroid ANR
- 什么是ANR,如何避免?
- 什么是ANR 如何避免
- 什么是ANR 如何避免
- Android----什么是ANR?
- Android中什么是ANR?怎么解决ANR?
- 什么是ANR 如何避免它?
- 什么是ANR 如何避免它?
- 什么是ANR 如何避免它?
- 什么是ANR 如何避免它
- 什么是ANR 如何避免它
- 什么是ANR 如何避免它?
- 如何开发Web应用程序
- windows应用程序开发笔记一:windows应用程序介绍
- 汇编语言子函数——128位的加法运算
- poj1062 最短路(加限制)
- 主题模型TopicModel:LSA(隐性语义分析)模型和其实现的早期方法SVD
- 什么是ANR
- android基础笔记——补间动画(Tween)代码实现
- 开始Linux学习之旅
- CArchive体会
- 2015-1-9_C++中奇怪的std:string
- 十八周OJ 复仇者联盟之数组成绩统计
- Android基础笔记——帧动画(Frame)
- "javax.servlet.http.HttpServlet" was not found
- Android Studio 开发环境配置(2015/1/9-)