必威体育Betway必威体育官网
当前位置:首页 > IT技术

HandlerThread的应用场景

时间:2019-11-02 11:46:51来源:IT技术作者:seo实验室小编阅读:84次「手机版」
 

handlerthread

handlerthread是什么?

它就是一个线程,一个实现了Handler通信机制的线程,也就是说不用我们再去实现Looper的一系列工作了。实现了这个功能之后,这个线程就和我们的主线程类似。我们也可以像是在主线程一样快乐的使用Handler了,而且也不用担心阻塞主线程了。

个人认为HandlerThread有以下优点:

1.众所周知普通的Thread一旦执行完,就结束。然而实际中,很多事情需要一边一边的反复执行,总不能一次次的创建线程吧!(有人会说线程池,我就呵呵,无法反驳了)

2.线程池自然是可以的,但是线程池有Handler那么顺手吗?想调用了send一个消息,不想调用了remove掉即可,不要太简单

项目中的场景:

先上一段代码

private void loopQuestionVoice(String fileName){
		if(fileName==null){
			handler.postDelayed(rRepeat, 10000);
			//接口,本次题目播放完毕
			playStateListener.onQuestionCompletion();
			return;
		}
		playV(fileName);//播放本条音频内容
		mediaplayer.setOnCompletionListener(new OnCompletionListener() {
			@Override
			public void onCompletion(MediaPlayer mp) {
				mediaPlayer.setOnCompletionListener(null);
				if(isBreak){
					return;
				}
				loopQuestionVoice(voices.poll());
			}
		});
	}

简单介绍一下,项目中有个需求:将若干个存在于队列中的音频段(代码中的voices)依次播放,播放完成10s后再次重复播放该队列语音。最初代码如上直接在主线程,因为我们用到的音频基本上都是一句话长短,所以一般是不用考虑异步处理的。但是当多个音频连续播放,外加重复的情况下就会阻塞触摸事件的处理,出现ANR异常。这时候就要需要在子线程去处理这部分了。线程池是有用过的,只不过项目中还需要暂停,清除,重新开始等功能,用线程着实不如Handler方便。

至于使用就比较简单了,如下:

        HandlerThread looperThread=new HandlerThread("LooperMusic");
		looperThread.start();
		handler=new Handler(looperThread.getLooper());

只是需要注意使用前需要调用start()方法;使用完记得调到quit()释放Loop

文章最后发布于: 2018-07-26 14:33:05

相关阅读

HandlerThread(详细例子)

HandlerThread是什么 官方解释 Handy class for starting a new thread that has a looper. The looper can then be used to cre

Android多线程:HandlerThread详细使用手册

前言 多线程的应用在Android开发中是非常常见的,常用方法主要有:继承Thread类 实现Runnable接口 Handler AsyncTask HandlerThread

Android HandlerThread使用介绍以及源码解析

1. 前言 首先,看一下官方对HandlerThread的解释: Handy class for starting a new thread that has a looper. The looper can th

分享到:

栏目导航

推荐阅读

热门阅读