设为首页 |收藏本站
返回 发新帖回复

951

主题

0

好友

3010万

积分

管理员

Rank: 9Rank: 9Rank: 9

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老

发表于 2015-6-4 15:54:14 |显示全部楼层
HandlerThread在上一篇android耗时任务_handler中介绍了handler的运作机制,并且介绍了一个普通线程中产生looper并使用handler机制通信的简单例子。我们知道在普通线程中是没有looper的,也就不好在普通线程空间中使用handler机制,如果每次都像上一篇的例子那样做的话就会略显麻烦。其实Android已经封装了一个拥有自己looper的线程HandlerThread,它的实现和上一篇中给出的例子基本一,只是更加专业一点。下面是此类的详细代码。
public class HandlerThread extends Thread {
    private int mPriority;  
    private int mTid =-1;
    private Looper mLooper;
  
    publicHandlerThread(String name) {
        super(name);
        mPriority =Process.THREAD_PRIORITY_DEFAULT;
    }
  
    publicHandlerThread(String name, int priority) {
        super(name);
        mPriority =priority;
    }
  
    protected void onLooperPrepared() {
    }
  
    public void run() {
        mTid =Process.myTid();
        Looper.prepare();
        synchronized(this) {
            mLooper =Looper.myLooper();
            notifyAll();   
        }
       Process.setThreadPriority(mPriority);
       onLooperPrepared();
        Looper.loop();  
        mTid = -1;
    }
  


    public Looper getLooper() {
        if (!isAlive()) {
            return null;
        }
  
        // If the threadhas been started, wait until the looper has been created.
        synchronized(this) {
            while(isAlive() && mLooper == null) {
                try {
                   wait();
                } catch(InterruptedException e) {
                }
            }
        }
        return mLooper;
    }
  
    public boolean quit(){
        Looper looper =getLooper();
        if (looper !=null) {
           looper.quit();
            return true;
        }
        return false;
    }
  


    public intgetThreadId() {
        return mTid;
    }
}

此类就是继承了Thread类,使用此类时一定要注意必须start(),否则run()方法没有调用,handler机制也就没有建立起来。
经典应用对于HandlerThread的一个经典应用就是在service中的应用,我们知道,一般而言service是运行在主线程中的,在android耗时任务_ANR中我也建议在BroadcastReceiver中启动service,在service中启动线程处理耗时任务。那么如何启动线程,下面给出一个经典的代码:
public class BackService extends Service {

    private ServiceHandler serviceHandler;

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }


    private final class ServiceHandler extends Handler {


        public ServiceHandler(Looper looper) {
            super(looper);
        }


        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            onHandleIntent((Intent) msg.obj);
            // 在其参数startId跟最后启动该service时生成的ID相等时才会执行停止服务。
            stopSelf(msg.arg1);
        }
    }


    @Override
    public void onCreate() {
        super.onCreate();
        HandlerThread thread = new HandlerThread("BackService");
        thread.start();


        Looper serviceLooper = thread.getLooper();
        serviceHandler = new ServiceHandler(serviceLooper);
    }


    @Override
    public void onStart(Intent intent, int startId) {
        Message msg = serviceHandler.obtainMessage();
        msg.arg1 = startId;
        msg.obj = intent;
        serviceHandler.sendMessage(msg);
    }


    protected void onHandleIntent(Intent intent) {
               //做你的异步任务
    }
}

回复

使用道具 举报

0

主题

0

好友

871

积分

高级会员

Rank: 4

发表于 2015-9-18 14:01:47 |显示全部楼层
好帖要顶,楼主的头像还是不错滴
回复

使用道具 举报

0

主题

0

好友

-18

积分

限制会员

发表于 2016-3-12 14:24:20 |显示全部楼层
不错不错,楼主是个绝对高手













白癜风手术费用多少
白癜风怎么引起的
白癜风新疗法
白癜风能够治愈吗
看白癜风哪个医院最好
治疗白癜风最新技术
白癜风用什么药物治疗
治白癜风最好的医院
小儿白癜风发病症状
儿童白癜风初期症状
中医能根治白癜风吗
婴儿白癜风治疗
白癜风好治疗么
白癜风可以根治吗
白癜风自己会好吗
小儿白癜风治疗
成人白癜风的治疗
白癜风能否医好
治疗儿童白癜风
白癜风有什么症状
回复

使用道具 举报

0

主题

0

好友

-56

积分

限制会员

发表于 2016-3-13 09:02:51 |显示全部楼层
交流交流好啊!楼主真厉害













白癜风要怎么治疗
那些医院看白癜风好
土方治疗白癜风
吃什么药治白癜风最好
抗白癜风药的副作用
白癜风治疗最好的医院
中医治疗白癜风的方法
老年白癜风能彻底治好吗
看白癜风哪个医院最好
白癜风有什么中药方
儿童白癜风的起因
白癜风人的寿命
白癜风最佳治疗方法
最好的小儿白癜风医院
检查治疗白癜风哪好
看白癜风专科医院
白癜风该吃什么药
白癜风治疗
哪里治白癜风好
白癜风发病的症状
回复

使用道具 举报

0

主题

0

好友

608

积分

高级会员

Rank: 4

发表于 2016-4-15 16:44:52 |显示全部楼层
鉴定完毕.!












实习生必备关注微信号:shsxjy
回复

使用道具 举报

0

主题

0

好友

5

积分

新手上路

Rank: 1

发表于 2016-7-6 13:44:57 |显示全部楼层
我很喜欢,太精彩了













白癜风的常见外用药
癫痫的早期症状是什么
白癜风药方
小儿白癜风早期症状
哪里治疗白癜风最好
外伤引起白癜风会扩散吗
癫痫病会不会遗传
儿童白癜风吃什么药
脑瘫的前期症状
轮回修真诀
白癜风医院哪家好点
治白癜风的偏方
重庆癫痫病专科医院
看癫痫病哪里最好
癫痫的治疗
癫痫怎么治疗好
如何治疗小儿脑瘫
白癜风哪个医院治疗好
白癜风病如何治疗
癫痫用什么药好
回复

使用道具 举报

0

主题

0

好友

-54

积分

限制会员

发表于 2016-7-15 09:00:33 |显示全部楼层
呵呵你真厉害,佩服哦













2016适合圆脸的发型自然显瘦气质提升
男生烫什么发型好看定位烫发轻松显时尚
韩式淑女型扎发气质飙升
优雅麻花辫扎发超清新DIY发型
方脸女生适合什么发型巧妙修饰完美脸型
女生假发梨花头发型百变造型随意选
2015卷发发型图片秋日时尚靓妹必备
2016年流行发型男帅气清爽过迎盛夏
甜美萝莉造型集锦轻松打造甜心小宝贝
2016韩式男生烫卷发发型
细数张艺兴几大发型
时尚短发蘑菇头男神也hold不住
OL最爱9款中分盘发发型优雅大气晚装必备
流行的日系圆脸烫发设计
乖巧可爱女生锅盖头短发发型
好看的卷发发型图片轻松UP时尚气质
少女时代10月最新写真韩式发型演绎复古宫廷风
日系女生发型设计尽显时尚可爱范
时尚日系OL发型集锦优雅干练御姐范儿
2015韩式新娘发型待嫁美娇娘必备
回复

使用道具 举报

0

主题

0

好友

28

积分

新手上路

Rank: 1

发表于 2016-7-25 04:24:24 |显示全部楼层
相信楼主的说,非常支持你













男生无刘海发型,型男硬汉必备造型
2016年最新发型女百搭时尚美不胜收
陈坤oppo手机发型陈坤最新n1广告发型图解
女生气质发型设计时尚修颜还百搭
夏季发型中长发扎法清爽利落端午必备
不同厚度的韩式刘海发型
男生流行学生头发型可爱帅气满分
别样烫发打造优雅的不同风格
韩式新娘发型设计完美凸显时尚范
最美马拉松女孩毛豆微博蹿红长发清纯美腻赛过零脂肪女孩
西南财经大学最美日语老师惊艳走红披肩发型被封女神
可爱小男孩发型欣赏彰显清新帅气正太风
学生短发发型图片甜美时尚青春范
皮卡路
大卷长发烫发凸显女神魅力
帅气李易峰时尚个性发型
简约花苞头盘发图解几步打造知性优雅
淑女半扎发图解分分钟提升气质
优雅长发女生发型气质女神你来做
男士发型设计怎样好看个性定位烫彰显时尚
回复

使用道具 举报

返回 发新帖 回复
您需要登录后才可以回帖 登录 | 立即注册

Powered by androidym! X2.5© 2001-2012 Comsenz Inc.( 交换友情链接:qq 87232433 )  
回顶部