千家信息网

Android多线程实例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文小编为大家详细介绍"Android多线程实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Android多线程实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
千家信息网最后更新 2026年11月02日Android多线程实例分析

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

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

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

主Activity

public class TestListActivity extends ListActivity { private ImageListAdapter imageListAdapter = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.imagelist); String[] images = {"https://cache.yisu.com/upload/information/20210522/379/538936.jpg","https://cache.yisu.com/upload/information/20210522/379/538938.jpg"}; imageListAdapter = new ImageListAdapter(getApplicationContext(), images); setListAdapter(imageListAdapter); } }

适配器

  1. import java.util.ArrayList;

  2. import java.util.List;

  3. import android.content.Context;

  4. import android.graphics.Bitmap;

  5. import android.os.Handler;

  6. import android.os.Message;

  7. import android.view.View;

  8. import android.view.ViewGroup;

  9. import android.widget.BaseAdapter;

  10. import android.widget.ImageView;

  11. import android.widget.TextView;

  12. public class ImageListAdapter extends BaseAdapter {

  13. private Context context;

  14. private String[] myImages = null;

  15. public ImageListAdapter(Context context, String[] myImages){

  16. this.context = context;

  17. this.myImages = myImages;

  18. }

  19. @Override

  20. public int getCount() {

  21. if(myImages == null){

  22. return 0;

  23. }

  24. return myImages.length;

  25. }

  26. @Override

  27. public String getItem(int position) {

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

  29. return null;

  30. }

  31. return myImages[position];

  32. }

  33. @Override

  34. public long getItemId(int position) {

  35. return position;

  36. }

  37. @Override

  38. public View getView(int position, View convertView, ViewGroup parent) {

  39. View item = null;

  40. if(convertView != null){

  41. item = convertView;

  42. } else {

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

  44. }

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

  46. final String image = getItem(position);

  47. if(image == null){

  48. return item;

  49. }

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

  51. new Thread(){

  52. public void run(){

  53. Message msg = new Message();

  54. msg.what = 0;

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

  56. Bitmap bitmap = getBitmap(image);

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

  58. list.add(bitmap);

  59. list.add(imageView);

  60. msg.obj = list;

  61. handler.sendMessage(msg);

  62. }

  63. }.start();

  64. return item;

  65. }

  66. private Handler handler = new Handler() {

  67. @Override

  68. public void handleMessage(Message msg) {

  69. switch (msg.what) {

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

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

  72. List list = (List)msg.obj;

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

  74. ImageView iv = (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.xml android: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多线程实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

线程 图片 实例 实例分析 分析 文章 内容 数据 方式 界面 程序 处理 妥当 安全 不用 例子 只是 图片下载 地址 安全性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技平台互联网 疫情对互联网科技公司影响 互联网科技集团 互联网 的科技创新 万易互联网科技有限公司 互联网科技股有哪些 互联网科技大会案例 成都玖崟互联网科技有限公司乐商圈怎么样 新华互联网科技2019 移动互联网科技股 岳阳华臻互联网科技有限公司 知域互联网科技有限公司大骗子 移动互联网年度科技创新 玉溪互联网科技怎么选 南博望互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司 互联网对科技影响 科技互联网专业务虚会材料 六子台科技互联网展会 每日互联网科技新闻 互联网公司 科技公司 美国互联网前沿科技 团飞科技与伯堂互联网服务平台 长沙茂晟互联网科技有限公司 江苏互联网智能科技软件 西安有哪些互联网高科技企业 美国五大互联网科技公司市值多少 玉溪新华互联网科技怎么选 杭州科技互联网公司有哪些 互联网科技快速发展优美句子
0