Android学习:UI线程阻塞

一:看程序

二:现象

程序启动,button1会自动向右滑动三次,但是当点击Button2的时候,button1移动会暂停5秒。

三:线程阻塞:

当一个应用程序启动之后,android系统会为这个应用创建一个主线程。这个线程非常重要,它负责渲染视图,分发事件到响应监听器并执行,对界面进行轮询监听。因此,一般也叫做“UI线程”。

android系统不会给应用程序的多个元素组件,建立多个线程来执行。一个视图Activity中的多个view组件运行在同一个UI线程中。因此,多个view组件的监听器的执行可能会相互影响。

例如:当在UI线程中执行耗时操作,比如访问网络,访问数据库等。则会导致UI线程阻塞。当UI线程阻塞,则屏幕就会出现卡死情况。这样用户体验非常差。当线程阻塞超过5秒以后,android系统有可能进行干预,弹出对话框询问是否关闭应用程序。

时间: 2024-08-04 06:11:54

Android学习:UI线程阻塞的相关文章

Android学习:UI线程规则+经典异常

一:看程序 二:可以创建一个新的线程执行阻塞部分 new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(50000); } catch (InterruptedException e) { e.printStackTrace(); } } }); 三:现象 点击button2,不会影像button1,button1继续移动. 四:规则 There are simply two rules to A

Android Studio学习随笔-UI线程阻塞以及优化

我们在使用手机的时候,经常会遇到一个问题:先是卡死,然后跳出该程序无响应,是否关闭的提示(当然有可能是我们手机性能太差=.=)这是因为线程的阻塞引起的,在这里我讲述一下UI线程,一般处理程序会在UI线程中执行耗时操作,这回导致UI线程阻塞,当UI线程阻塞,屏幕会出现卡死,用户体验会变得非常差,当线程阻塞超过5s,android系统可能进行干预,弹出对话框询问是否关闭.那如何解决呢? 解决方案一:创建一个新线程 我在UI视图中创建了一个button和一个textView Button button

Android学习:AsyncTask方案解决UI线程阻塞

post方式能解决UI线程阻塞问题,但是代码的可读性较差. 一:看程序 二:定义AsyncTask private class testTask extends AsyncTask<String, Void, Integer> { protected Integer doInBackground(String... arg0) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace();

10 UI线程阻塞及其优化

1.button1移动30次的小动画: Ui_thread01Activity.java: public class Ui_thread01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

Android中UI线程与后台线程交互设计的5种方法

我想关于这个话题已经有很多前辈讨论过了.今天算是一次学习总结吧. 在android的设计思想中,为了确保用户顺滑的操作体验.一 些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须要重新开启一个后台线程运行这些任务.然而,往往这些任务最终又会直接或者 间接的需要访问和控制UI控件.例如访问网络获取数据,然后需要将这些数据处理显示出来.就出现了上面所说的情况.原本这是在正常不过的现象了,但是 android规定除了UI线程外,其他线程都不可以对那些UI控件访问和操控.为了解决

Android 非UI线程中更新UI

Android 非UI线程中更新UI runOnUiThread(new Runnable() { public void run() { onDown(null); } });

jQuery同步Ajax带来的UI线程阻塞问题及解决办法

原文:jQuery同步Ajax带来的UI线程阻塞问题及解决办法 俗话说不作死就不会死,今天作死了一回,写了一个比较二逼的函数,遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return.基本的逻辑剥离出来是这样的: function getData1(){ var result; $.ajax({ url : 'p.php'

Android学习:UI线程阻塞post解决方案

一:看程序 二:post方法 //线程阻塞优化方案1:post方法 v.post(new Runnable() { @Override public void run() { int sum = 10; TextView view = (TextView) v; view.setText("" + sum); } }); 三:后台日志 说明post方法,执行内容放到UI主线程执行.

【转载】Android中UI线程与后台线程交互设计的5种方法

原帖地址:http://www.cr173.com/html/19165_1.html 在android的设计思想中,为了确保用户顺滑的操作体验.一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须要重新开启一个后台线程运行这些任务.然而,往往这些任务最终又会直接或者间接的需要访问和控制UI控件.例如访问网络获取数据,然后需要将这些数据处理显示出来.就出现了上面所说的情况.原本这是在正常不过的现象了,但是android规定除了UI线程外,其他线程都不可以对那些UI控件访问