Android多线程实例分析

Android多线程实例分析

本文小编为大家详细介绍“Android多线程实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android多线程实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

在android程序中,会有一些耗时的操作,比如从网上抓取图片,下载文件,批量更新数据库等,这些操作对于手机而言会需要很长的时间,而应用程序界面又不能等到这些操作完成后再显示,所以要让界面各这些耗时的操作并行处理,用多线程可以解决这个问题。当然还有其它解决方案,比如用Service.

Android多线程实例分析

我们先作一个例子吧,大概是这样的:有一个列表,每行显示的一个图片,图片是存放在网上的。如果不用多线程,也是可以的,但是要等到所有图片下载完了才能展示出来。这种方式对用户体验很不友好,所以我们采用多线程的方式,对每一个图片开启一个线程,当其下载完数据后,在主线程中显示出来。

主Activity

publicclassTestListActivityextendsListActivity{privateImageListAdapterimageListAdapter=null;/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.imagelist);String[]images={"https://mip.qiaqa.com/uploads/article/2022/03/29/30574.jpg","https://mip.qiaqa.com/uploads/article/2022/03/29/30575.jpg"};imageListAdapter=newImageListAdapter(getApplicationContext(),images);setListAdapter(imageListAdapter);}}

适配器

  1. importjava.util.ArrayList;

  2. importjava.util.List;

  3. importandroid.content.Context;

  4. importandroid.graphics.Bitmap;

  5. importandroid.os.Handler;

  6. importandroid.os.Message;

  7. importandroid.view.View;

  8. importandroid.view.ViewGroup;

  9. importandroid.widget.BaseAdapter;

  10. importandroid.widget.ImageView;

  11. importandroid.widget.TextView;

  12. publicclassImageListAdapterextendsBaseAdapter{

  13. privateContextcontext;

  14. privateString[]myImages=null;

  15. publicImageListAdapter(Contextcontext,String[]myImages){

  16. this.context=context;

  17. this.myImages=myImages;

  18. }

  19. @Override

  20. publicintgetCount(){

  21. if(myImages==null){

  22. return0;

  23. }

  24. returnmyImages.length;

  25. }

  26. @Override

  27. publicStringgetItem(intposition){

  28. if(position<0||myImages==null||position>myImages.length){

  29. returnnull;

  30. }

  31. returnmyImages[position];

  32. }

  33. @Override

  34. publiclonggetItemId(intposition){

  35. returnposition;

  36. }

  37. @Override

  38. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){

  39. Viewitem=null;

  40. if(convertView!=null){

  41. item=convertView;

  42. }else{

  43. item=View.inflate(context,R.layout.image_item,null);

  44. }

  45. finalImageViewimageView=(ImageView)item.findViewById(R.id.image);

  46. finalStringimage=getItem(position);

  47. if(image==null){

  48. returnitem;

  49. }

  50. //对每个图片地址创建一个线程,

  51. newThread(){

  52. publicvoidrun(){

  53. Messagemsg=newMessage();

  54. msg.what=0;

  55. //获得图片的Bitmap对象。getBitmap省略了,就是从网上通过http下载图片然后转化成一个Bitmap

  56. Bitmapbitmap=getBitmap(image);

  57. Listlist=newArrayList();//将bitmap和imageView包装成一个List传到线程外

  58. list.add(bitmap);

  59. list.add(imageView);

  60. msg.obj=list;

  61. handler.sendMessage(msg);

  62. }

  63. }.start();

  64. returnitem;

  65. }

  66. privateHandlerhandler=newHandler(){

  67. @Override

  68. publicvoidhandleMessage(Messagemsg){

  69. switch(msg.what){

  70. case0://接到从线程内传来的图片bitmap和imageView.

  71. //这里只是将bitmap传到imageView中就行了。只所以不在线程中做是考虑到线程的安全性。

  72. Listlist=(List)msg.obj;

  73. Bitmapbitmap=(Bitmap)list.get(0);

  74. ImageViewiv=(ImageView)list.get(1);

  75. iv.setImageBitmap(bitmap);

  76. break;

  77. default:

  78. super.handleMessage(msg);

  79. }

  80. }

  81. };

  82. }

布局xml
imagelist.xml

android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="10px"android:gravity="center_horizontal"android:background="#ffffff">android:layout_width="fill_parent"android:layout_height="fill_parent"/>android:layout_width="wrap_content"android:layout_height="wrap_content"/>image_item.xmlandroid:layout_width="fill_parent"android:layout_height="wrap_content">android:id="@+id/image"android:layout_width="70px"android:layout_height="50px"android:paddingRight="5px"/>

读到这里,这篇“Android多线程实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-03-29 22:36:43
收藏
分享
海报
0 条评论
32
上一篇:Python怎么实现查询剪贴板自动匹配信息 下一篇:Python利用百度地图获取两地距离的方法
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码