设为首页 加入收藏

TOP

Android多线程handler+runOnUithread+view.post+handler.post
2014-11-24 02:56:00 来源: 作者: 【 】 浏览:0
Tags:Android 线程 handler runOnUithread view.post handler.post

下面说说android的多线程机制,讲到多线程,就可以说道android有名的ANR(Application Not Responding)既应用程序未响应,触发ANR的条件大致有两个:1、在activity中超过5秒的时间未能响应下一个事件。2、BroadcastReceive超过10秒,这两个条件都会触发ANR。


相关阅读:


下面模拟一个activity的ANR


protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
Thread.sleep(10000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
});
}


运行效果:


未触发:


Android多线程handler+runOnUithread+view.post+handler.


触发后:


Android多线程handler+runOnUithread+view.post+handler.


当用户使用时 出现这样的体验,可想而知会很蛋疼的。。。
有人就会问 为什么会有ANR这样的机制。
其实android系统中所有的UI显示都是在main线程中执行的,如果线程中有耗时操作时,线程中的其他UI组件就会等耗时结束时才能开始响应,所以为了避免这样的情况,android用handler将耗时操作放到子线程中执行,当结束时,将耗时操作的结果发回给主线程,所以这里又要引入线程间通信的概念


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ListView_v2_系统提供的一些 adap.. 下一篇Android自定义view属性

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: