由于书中篇幅有限,所以是书中的一些加上网上的文章构成。
先看一下HandlerThread特点:
1,HandlerThread本质上是一个线程类,它继承了Thread。
2,HandlerThread有自己的内部Looper对象,可以进行looper循环。
3,通过获取HnadlerThread的Looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务。
4,创建HandlerThread后必须先调用HandlerThread.start()方法,Thread会先调用run方法,创建Looper对象。
书中提到的HandlerThread与Handler区别:
普通Thread主要用于在run方法总共执行一个耗时任务,而Hanlder在内部创建了消息队列,外界需要通过Handler的消息方式来通知HandlerThread执行一个具体的任务。HandlerThread是一个很有用的类,它在Android中的一个具体的使用场景是IntentService。由于HandlerThread的run方法是一个无限循环,因此当明确不需要再使用HandlerThread时,可以通过它的quit或者quitSafely方法来终止线程的执行,这是一个良好的习惯。
具体实际中使用一下(网络权限注册别忘了):
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.administrator.hongyangzzx.MainActivity">
<ImageView
android:id="@+id/image"
android:scaleType="fitXY"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:gravity="center"
android:textSize="35dp"
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity:
public class MainActivity extends AppCompatActivity {
private String url[]={
"https://img-blog.csdn.net/20160903083245762",
"https://img-blog.csdn.net/20160903083252184",
"https://img-blog.csdn.net/20160903083257871",
"https://img-blog.csdn.net/20160903083311972",
"https://img-blog.csdn.net/20160903083319668",
"https://img-blog.csdn.net/20160903083326871",
"http://m.qpic.cn/psb?/V10atUEF0hMZbt/xFmVjVscU8.WDx4tauu8XRywLVRjVVoZRIEymEu4p*0!/b/dF8BAAAAAAAA&bo=0AExAQAAAAADB8M!&rf=viewer_4"
};
private ImageView imageView;
private Handler mUIHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
LogUtil.fussenLog().d("次数:"+msg.what);
ImageModel model = (ImageModel) msg.obj;
imageView.setImageBitmap(model.bitmap);
tv.setText(msg.what+"");
}
};
private TextView tv;
private HandlerThread mHandlerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCon