如何理解android多线程里的getLooper方法

sis_ying 2010-10-10 03:42:47
下面的代码是学习Handler.post方法的,第一种写法没有使用getLooper,结果运行的效果是一个线程,第二种写法使用了getLooper,运行的效果是多线程的:
package com.WriteCode.AndroidHandlerPost;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;

public class AndroidHandlerPost extends Activity {

private Handler mHandler = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//第一种写法beg,不使用getLooper,那么整个是一个线程(UI线程)
//mHandler = new Handler();
//第一种写法end,不使用getLooper,那么整个是一个线程(UI线程)

//第二种写法beg,不使用getLooper,那么整个是两个线程
HandlerThread handlerThread = new HandlerThread("myHandlerThread");
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper());
//第二种写法end,不使用getLooper,那么整个是两个线程

mHandler.post(new MyRunnable());

Log.e("OnCreate", "The Thread is: " + Thread.currentThread().getId());

setContentView(R.layout.main);
}

private class MyRunnable implements Runnable
{

@Override
public void run() {
// TODO Auto-generated method stub
Log.e("Runnable", "The Thread is running");
Log.e("Runnable", "The Thread is: " + Thread.currentThread().getId());
try
{
Thread.sleep(6000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}

}
}

谁能解释下getLooper方法是干什么的,第二种方法为什么能实现多线程,谢谢
...全文
679 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛叔 2010-10-12
  • 打赏
  • 举报
回复
没有专门讲android多线程的
高焕堂好像有本,但是买不到。。。
coolnan 2010-10-10
  • 打赏
  • 举报
回复
getLooper用来取消息队列,第二种方法是异步的自然多线程。

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧