这里Handler线程队列和ui主线程公用一共。Handler并没有真正的启动一个线程,而是直接调用run方法。
public class Test extends Activity implements OnClickListener {
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
handerHandler.removeMessages(0);
}
private TextView textView1;
public static int add;
private Handler handerHandler = new Handler() {
/*
* (non-Javadoc)
* @see android.os.Handler#handleMessage(android.os.Message)
*/
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
// textView1.setText("add");
textView1.setText(""+add+"");
++add;
removeMessages(0);
sendEmptyMessageDelayed(0, 5000);
Log.e("I AM HANDLER", "I AM TEST>>>>>>>>>>>>>>>>>>>>>>>O");
break;
case 1:
break;
case 3:
break;
case 4:
break;
}
super.handleMessage(msg);
}
};
Runnable testRunnable = new Runnable() {
public void run() {
// 在这个线程里我们发送一个消息给消息队列,发完之后继续执行下面的代码,
// 至于发送的消息的处理由handleMessage处理。这是异步的两个线程,实现了两个线程间的通信
handerHandler.sendEmptyMessage(0);
Log.e("这是一个线程", "》》》》》》》》》》》》》》》》》》》》》》这个线程要打印run");
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
handerHandler.post(testRunnable);
// Message msg = new Message();
// msg.what=0;
// handerHandler.sendMessage(msg);
//这用方法比上面那种Message的获取方法节省内部空间
// Message msg=handerHandler.obtainMessage();
// msg.arg1=0;
// handerHandler.sendMessage(msg);
}
分享到:
相关推荐
在讲完Looper,Handler和HandlerThread一章之后,一位学生问我们如何将流数据(从传感器)从后台线程传递回主线程(UI)? 对于此用例, HandlerThread原因如下: 我们的后台线程只是在... 如果UI线程不能足够快地处
2.Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper(从Message Queue取出)所送来的消息。 3. Message Queue(消息队列):用来存放线程放入的消息。 4.线程:UI thread...
些有Looper的线程,不管是UI线程还是子线程,只要你有Looper,我就可以往你的消息队列里面添加东西,并做相应的处理。 但是这里还有一点,就是只要是关于UI相关的东西,就不能放在子线程中,因为子线程是不能操作UI...
在android开发中,一说起线程的使用,...这样创建的handler是在主线程即UI线程下的Handler,即这个Handler是与UI线程下的默认Looper绑定的。Looper是用于实现消息队列和消息循环机制的。因此,如果是默认创建Handler
Android–多线程之Handler 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决Android应用中多线程的问题,在Android中不 允许Activity新启动的线程访问该Activity里的UI组件,...
子线程与主线程通过Handler来进行通信。子线程可以通过Handler来通知主线程进行UI更新。 Handler是Android中引入的一种让开发者参与处理线程中消息循环的机制。每个Hanlder都关联了一个线程,每个线程内部都维护了一...
Handler在android里负责发送和处理消息。它的主要用途有(或者是干什么的): 1)执行计划任务,按计划(定时)发送... 2)线程间通信,把从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)
android 的service和activity是运行在UI主线程的。在android线程中,只有主线程即UI线程有自己的默认的消息队列。子线程需要创建自己的消息队列,并把消息发给队列,并循环起来,发给handler处理。
每个Handler对象与创建它的线程相关联,并且每个...由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。 通过Runnable在子线程中更新界面的例子 在onCreate中创建Handler 代码如下:p
由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。 出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题。为了解决这...
Android中除了UI线程(主线程),创建的工作线程默认是没有消息循环和消息队列的。如果想让该线程具有消息队列和消息循环,并具有消息处理机制,就需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用...
一、问题:在Android启动后会在新进程里创建一个主线程,也叫UI线程(非线程安全)这个线程主要负责监听屏幕点击事件与界面绘制。当Application需要进行耗时操作如网络请求等,如直接在主线程进行容易发生ANR错误。...
Handler的最常见应用场景之一便是通过Handler在子线程中间接更新UI。Handler的作用主要有两个:一是发送消息;二是处理消息,它的运作需要底层Looper和MessageQueue的支撑。MessageQueue即消息队列,它的底层用...
这旨在作为如何将线程与管道模式一起使用的示例。 那么你可以用 Loopers 和 Handlers 做什么呢? 基本上,它们实现了一种常见的并发模式,我称之为管道线程。 这是它的工作原理: 管道线程持有一个任务队列,这些...
当子线程中进行耗时操作后需要更新UI时,通过Handler将有关的UI操作切换到主线程中执行。 四要素: Message(消息):需要被传递的消息,其中包含了消息标识(what),消息处理数据和处理对象(arg1,arg2,obj),发送...
这个UI线程是在应用第一次启动时开启的,也称之为主线程(Main Thread),该线程专门用来操作UI组件,在这个UI线程中我们不能进行耗时操作,否则就会出现ANR(Application Not Responding)现象。如果我们在子线程中去...
如果当前线程是UI线程,事件会被加到一个队列中,由一个线程依次处理这些事件,如果某个事件处理时间太长,会阻塞后面的事件的派发或处理。onEventAsync:事件处理会在单独的线程中执行,主要用于在后台线程中执行...
2)Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息. 3) Message Queue(消息队列):用来存放线程放入的消息. 4)线程:UI thread通常...
所以了解创建无阻碍的响应式 UI 很重要。 MessageQueue 是一个队列,其中包含消息任务。 Handler 在 MessageQueue 中以任务形式排队,Looper 在任务出现时执行它们 MessageQueue. Looper 使线程保持活动状态,...
通过看源码发现,post这个方法是把任务r转成一个message放进了handler所在的线程中的messageQueue消息队列中,并且是立刻发送的消息,这样它既不是异步的也不是延时的,所以问题来了: 1. 它和sendMessage()有什么...