一个handler允许你发送一个进程消息和一个runnable对象去一个线程的MessageQueue.每一个handler实例去关联一个单一的线程或者一个线程消息队列。当你创造一个新的handler,它一定会从线程点上创建一个线程/消息队列。然后从消息队列中释放。
这是handler的两个主要的用法:
1.安排消息或Runnable 在某个主线程中某个地方执行
2.安排一个动作在不同的线程中执行
handler中的一些分发消息的方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
子类需要继承handler类并重写handlerMessage(Message msg)方法
如下代码实现了图片的循环,在主线程中创建handler,在子线程中利用handler发送消息,每个隔多少秒handle处理消息并且更新ui:
package com.example.testhandler;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.ImageView;
public class MainActivity extends Activity {
int []imageView = {
R.drawable.num1,R.drawable.num2,R.drawable.num3,R.drawable.num4,R.drawable.num5};
int imagecount=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView image = (ImageView)this.findViewById(R.id.image);
final Handler handler = new Handler(){
public void handleMessage(Message msg){
if(msg.what==0x1233)
image.setImageResource(imageView[imagecount++]);
if(imagecount>=4)
{
imagecount=0;
}
}
};
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = 0x1233;
handler.sendMessage(msg);
};
}, 0, 800);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。