java handler线程_Java的HandlerThread,Handler,Thread使用方法(转)

Handler会关联一个单独的线程和消息队列。Handler默认关联主线程,虽然要提供Runnable参数

,但默认是直接调用Runnable中的run()方法。也就是默认下会在主线程执行,如果在这里面的操作会有阻塞,界面也会卡住。如果要在其他线程执行,可以使用HandlerThread。

HandlerThread的使用

a4c26d1e5885305701be709a3d33442f.png

//Handler handler = new Handler() {//...//}

HandlerThread uIhandlerThread = new HandlerThread("update");

uIhandlerThread.start();//Handler UIhandler = new Handler(uIhandlerThread.getLooper());

Handler uIhandler = new Handler(uIhandlerThread.getLooper(),newCallback() {public booleanhandleMessage(Message msg) {

Bundle b=msg.getData();int age = b.getInt("age");

String name= b.getString("name");

System.out.println("age is " + age + ", name is" +name);

System.out.println("Handler--->" +Thread.currentThread().getId());

System.out.println("handlerMessage");return true;

}

});

a4c26d1e5885305701be709a3d33442f.png

当要停止uIhandlerThread执行时用:

if(uIhandlerThread!=null) {

pointThread.quit();

}

Handler的使用

目前常使用的有两种用法,

一种是自定义Handler,在handleMessage进行事件的处理,

这个Message可以是在其他线程中send的,或者在主线程中send。

在线程中发送信息到主进程:

1.定义handler

a4c26d1e5885305701be709a3d33442f.png

public class MyH

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的安卓服务Handler线程代码: ```java public class MyService extends Service { private Looper mServiceLooper; private ServiceHandler mServiceHandler; // Handler that receives messages from the thread private final class ServiceHandler extends Handler { public ServiceHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { // Do some work here // ... // Stop the service using the stopSelf() method. // This will also stop the thread. stopSelf(msg.arg1); } } @Override public void onCreate() { // Start up the thread running the service. Note that we create a // separate thread because the service normally runs in the process's // main thread, which we don't want to block. HandlerThread thread = new HandlerThread("ServiceStartArguments", Process.THREAD_PRIORITY_BACKGROUND); thread.start(); // Get the HandlerThread's Looper and use it for our Handler mServiceLooper = thread.getLooper(); mServiceHandler = new ServiceHandler(mServiceLooper); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); // For each start request, send a message to start a job and deliver the // start ID so we know which request we're stopping when we finish the job Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; mServiceHandler.sendMessage(msg); // If we get killed, after returning from here, restart return START_STICKY; } @Override public IBinder onBind(Intent intent) { // We don't provide binding, so return null return null; } @Override public void onDestroy() { Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); } } ``` 该代码创建了一个HandlerThread使用它的Looper为ServiceHandler创建了一个Handler。ServiceHandler实现了handleMessage()方法,在该方法中执行服务的工作,然后调用stopSelf()方法停止服务。在onStartCommand()方法中,使用Handler发送一个消息来启动服务的工作。如果服务被杀死,则返回START_STICKY以便在可用时重新启动服务。最后,在onDestroy()方法中,显示一个Toast以表明服务已完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值