`

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 = {"http://image.baidu.com/image1.jpg","http://image.baidu.com/image2.jpg"};
imageListAdapter = new ImageListAdapter(getApplicationContext(), images);
setListAdapter(imageListAdapter);
}
}



适配器

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ImageListAdapter extends BaseAdapter {
private Context context;
private String[] myImages = null;
public ImageListAdapter(Context context, String[] myImages){
this.context = context;
this.myImages = myImages;
}
@Override
public int getCount() {
if(myImages == null){
return 0;
}
return myImages.length;
}

@Override
public String getItem(int position) {
if(position < 0 || myImages == null || position>myImages.length){
return null;
}
return myImages[position];
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View item = null;
if(convertView != null){
item = convertView;
} else {
item = View.inflate(context, R.layout.image_item, null);
}

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

final String image = getItem(position);
if(image == null){
return item;
}
//对每个图片地址创建一个线程,
new Thread(){
public void run(){
Message msg = new Message();
msg.what = 0;
//获得图片的Bitmap对象。getBitmap省略了,就是从网上通过http下载图片然后转化成一个Bitmap
Bitmap bitmap = getBitmap(image);
List list = new ArrayList();//将bitmap和imageView包装成一个List传到线程外
list.add(bitmap);
list.add(imageView);
msg.obj = list;
handler.sendMessage(msg);
}
}.start();

return item;
}

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0://接到从线程内传来的图片bitmap和imageView.
//这里只是将bitmap传到imageView中就行了。只所以不在线程中做是考虑到线程的安全性。
List list = (List)msg.obj;
Bitmap bitmap = (Bitmap)list.get(0);
ImageView iv = (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.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"/>



转http://my.oschina.net/hpujsj/blog/6805
分享到:
评论

相关推荐

    Android多线程操作

    标题"Android多线程操作"和描述"Android多线程开发实例,对使用多线程的用户有一定的参考价值!"暗示我们将深入探讨Android中的线程管理以及如何在实践中有效利用。 Android系统默认运行在主线程,也被称为UI线程,...

    Android多线程文件上传

    本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程,提高效率,并确保应用的响应性。 一、多线程基础 多线程是并发执行多个任务的能力,它允许应用程序同时处理多个任务,提高...

    多线程--下载---后台运行

    在Android或Java等平台中,多线程常用于处理耗时操作,如网络请求、数据计算或者复杂的UI更新,避免阻塞主线程,确保用户界面的流畅性。 后台下载则是指在用户不直接交互的情况下,应用程序在后台持续进行数据下载...

    Android多线程下载(二)

    总之,Android多线程下载涉及到了Android线程模型、并发控制、文件操作等多个方面,需要开发者有扎实的基础知识和实践经验。通过合理利用多线程,不仅可以提升应用性能,还能提高用户满意度。在实际开发中,要根据...

    android多线程demo(很清晰很详细)

    在Android开发中,多线程是一项至关重要的技术,它能够帮助开发者实现应用程序的高效运行,尤其是在处理耗时操作如网络请求、数据加载等场景。本文将深入探讨Android多线程的相关知识点,基于“android多线程demo(很...

    Android多线程下载

    **一、Android多线程下载** 1. **多线程概念**:多线程是指在一个程序中同时运行多个线程,每个线程处理不同的任务。在下载场景下,多线程意味着将一个大文件分割成多个小部分,每个部分由一个独立的线程负责下载。...

    Android开发中的多线程编程技术

    在Android中,主线程(UI线程)负责处理用户界面事件,如果长时间运行耗时操作,会阻塞主线程,导致应用无响应。因此,引入多线程来处理后台任务是必要的。 二、Android中的线程模型 1. Handler-Looper-Messenger:...

    Android多线程详解与Demo

    本文将深入探讨Android多线程的使用,包括其原理、常见方法以及如何通过实例进行实践。 首先,我们需要理解Android主线程,也被称为UI线程,它的主要任务是处理用户界面事件,如触摸事件、绘制视图等。如果在这个...

    android——多线程

    在Android开发中,多线程是一项至关重要的技术,特别是在处理耗时操作时,如网络请求、数据解析等,以避免阻塞主线程导致用户界面(UI)无响应。标题"android——多线程"和描述"android——Handler与多线程应用范例...

    Android多线程断点下载-IT计算机-毕业设计.zip

    因此,Android引入了多线程,让耗时任务在后台线程运行,保持UI线程的流畅。可以使用`Thread`、`Runnable`、`AsyncTask`或者更现代的`ExecutorService`来实现后台线程。 断点下载的核心在于记录已下载的数据状态。...

    android多线程

    ### Android多线程详解 #### 一、进程与线程概览 在深入探讨Android多线程之前,我们首先理解进程和线程的基本概念。**进程**是正在运行的程序实例,每个进程拥有自己独立的内存空间和系统资源。而**线程**则是...

    Android多线程处理[参考].pdf

    Android多线程处理是移动应用开发中的关键概念,尤其是在性能优化和用户体验提升方面。Android系统采用的是单线程模型,即主线程(也称为UI线程)主要负责处理用户界面的交互和绘图,包括按键事件、触摸事件以及屏幕...

    android多线程实例

    本实例将深入探讨Android多线程的实践应用及理论知识。 首先,我们要理解多线程的基本概念。在单线程环境中,程序按照顺序执行,而多线程则允许多个任务并行运行,提高了系统资源的利用率。Android主线程,也被称为...

    Android 多线程下载进度条src 支持android 1.6以上

    在Android中,由于主线程(UI线程)不允许进行耗时操作,因此,文件下载通常需要在后台线程执行。可以使用`AsyncTask`、`Thread`或`ExecutorService`来创建新线程。多线程下载则可以将大文件分割成多个小部分,同时...

    Android多线程实现简单字符串计数器

    本示例“Android多线程实现简单字符串计数器”旨在教你如何在Android环境中利用多线程来实现一个简单的字符串计数器功能。 首先,我们需要理解Android中的线程模型。主线程,也称为UI线程,负责处理用户界面的更新...

    防止ANR错误HandlerThread多线程解决耗时操作MyProject.zip

    本项目“防止ANR错误HandlerThread多线程解决耗时操作MyProject.zip”提供了一个实用的解决方案。 HandlerThread是Android提供的一个用于在后台线程执行任务的类,它是基于Thread和Looper的。在Android中,主线程...

    android 多线程 下载 更新 ui 例子

    在Android开发中,多线程是一项关键技能,特别是在处理耗时操作如下载任务时。本示例"android 多线程 下载 更新 ui 例子"旨在教你如何在Android环境中使用多线程进行文件下载,并实时更新UI来显示下载进度。 在...

    Android 多线程图片下载开源代码

    1. Android多线程编程:线程池、AsyncTask、Handler/Looper、IntentService 2. 网络请求:HttpURLConnection、OkHttp 3. 图片处理与优化:Bitmap、LruCache、Fresco、Glide 4. 异步编程模型:Callback、LiveData、...

    android多线程模型和service分析

    ### Android多线程模型与Service深入解析 #### 线程与进程概念解析 在深入探讨Android中的多线程模型之前,我们先明确一下基本概念。在计算机科学中,**进程**(Process)与**线程**(Thread)是两个核心概念。进程是...

    Android多线程PPT教学课件.pptx

    【Android多线程】\n\n在Android开发中,多线程是不可或缺的一部分,它能够提升应用程序的性能和用户体验。Android系统默认在一个主线程中运行应用程序,包括UI更新,如果在此线程中执行耗时操作,会导致用户界面...

Global site tag (gtag.js) - Google Analytics