Android多线程实例分析
Android多线程实例分析
本文小编为大家详细介绍“Android多线程实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android多线程实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
在android程序中,会有一些耗时的操作,比如从网上抓取图片,下载文件,批量更新数据库等,这些操作对于手机而言会需要很长的时间,而应用程序界面又不能等到这些操作完成后再显示,所以要让界面各这些耗时的操作并行处理,用多线程可以解决这个问题。当然还有其它解决方案,比如用Service.
我们先作一个例子吧,大概是这样的:有一个列表,每行显示的一个图片,图片是存放在网上的。如果不用多线程,也是可以的,但是要等到所有图片下载完了才能展示出来。这种方式对用户体验很不友好,所以我们采用多线程的方式,对每一个图片开启一个线程,当其下载完数据后,在主线程中显示出来。
主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);}}
适配器
importjava.util.ArrayList;
importjava.util.List;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.ImageView;
importandroid.widget.TextView;
publicclassImageListAdapterextendsBaseAdapter{
privateContextcontext;
privateString[]myImages=null;
publicImageListAdapter(Contextcontext,String[]myImages){
this.context=context;
this.myImages=myImages;
}
@Override
publicintgetCount(){
if(myImages==null){
return0;
}
returnmyImages.length;
}
@Override
publicStringgetItem(intposition){
if(position<0||myImages==null||position>myImages.length){
returnnull;
}
returnmyImages[position];
}
@Override
publiclonggetItemId(intposition){
returnposition;
}
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
Viewitem=null;
if(convertView!=null){
item=convertView;
}else{
item=View.inflate(context,R.layout.image_item,null);
}
finalImageViewimageView=(ImageView)item.findViewById(R.id.image);
finalStringimage=getItem(position);
if(image==null){
returnitem;
}
//对每个图片地址创建一个线程,
newThread(){
publicvoidrun(){
Messagemsg=newMessage();
msg.what=0;
//获得图片的Bitmap对象。getBitmap省略了,就是从网上通过http下载图片然后转化成一个Bitmap
Bitmapbitmap=getBitmap(image);
Listlist=newArrayList();//将bitmap和imageView包装成一个List传到线程外
list.add(bitmap);
list.add(imageView);
msg.obj=list;
handler.sendMessage(msg);
}
}.start();
returnitem;
}
privateHandlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
case0://接到从线程内传来的图片bitmap和imageView.
//这里只是将bitmap传到imageView中就行了。只所以不在线程中做是考虑到线程的安全性。
Listlist=(List)msg.obj;
Bitmapbitmap=(Bitmap)list.get(0);
ImageViewiv=(ImageView)list.get(1);
iv.setImageBitmap(bitmap);
break;
default:
super.handleMessage(msg);
}
}
};
}
布局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多线程实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
-
HTML5如何实现禁止android视频另存为
-
学java好还是学php好?
-
Android如何实现多点触控功能