入门android异步任务之AsyncTask(以加载网络图片为例子)

 

示例最终效果图:

 

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lesson"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="7" />
    
        <!-- 用于访问网络的授权 -->
    <uses-permission android:name="android.permission.INTERNET"/>
  

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
        <activity android:name="com.lesson.MainActivity">
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 基本布局文件activity_main.xml:一个ImageView和一个Button

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="48dp"/>
        

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="下载图片" />

</RelativeLayout>

 MainActivity.java

/*
 * 异步任务实现activity中加载网络图片
 */
package com.lesson;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.test.AndroidTestCase;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
	
private Button button;
private ProgressDialog progerssDialog;
private ImageView imageView;//要加载的图片
private final String url="http://www.windows7en.com/desk/UploadFiles_7433/201006/2010060910062279.jpg";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.activity_main);
		button=(Button)findViewById(R.id.button1);
		imageView=(ImageView)findViewById(R.id.imageView1);
		progerssDialog=new ProgressDialog(this);
		progerssDialog.setCancelable(false);
		//设置进度条水平加载
				progerssDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		button.setOnClickListener(new OnClickListener() {
		
			@Override
			public void onClick(View arg0) {
				//异步任务调用
				new ImageUpdate().execute(url);
				
			}
		});
	}
class ImageUpdate extends AsyncTask<String, Integer,byte[]>{

	//线程启动时,该方法被调用次序:2
	@Override
	protected byte[] doInBackground(String... arg0) {
		HttpGet httpGet=new HttpGet(arg0[0]);
		InputStream inputStream=null;
		byte[] result=null;
		byte[] data=new byte[1024];
		HttpClient client = new DefaultHttpClient();
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		try {
			HttpResponse httpResponse=client.execute(httpGet);//得到响应
			if(httpResponse.getStatusLine().getStatusCode()==200){
				
				inputStream=httpResponse.getEntity().getContent();
				//文件总长度
				int filelenth=(int) httpResponse.getEntity().getContentLength();
				int readlength=0;
				int totallenth=0;
				while((readlength=inputStream.read(data))!=-1){
					totallenth+=readlength;
                                 //用于进度条刻度计算公式
					int progressValue= (int)((totallenth/(float)filelenth)*100);
                                 //将刻度值传递到第2步
					publishProgress(progressValue);
					outputStream.write(data, 0, readlength);
				}
				result=outputStream.toByteArray();
			}
			
		} catch (ClientProtocolException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally{
			client.getConnectionManager().shutdown();
		}
		return result;
	}

//线程启动时,该方法被调用次序:4

@Override protected void onPostExecute(byte[] result) { 
// TODO Auto-generated method stub 
super.onPostExecute(result);
 Bitmap bitmap=BitmapFactory.decodeByteArray(result, 0, result.length); 
imageView.setImageBitmap(bitmap); 
progerssDialog.dismiss(); 
}

//线程启动时,该方法被调用次序:1

@Override protected void onPreExecute() { 
super.onPreExecute(); 
//加载图片时的进度显示对话框
 progerssDialog.show(); 
}

//线程启动时,该方法被调用次序:3

@Override protected void onProgressUpdate(Integer... values) { 
 super.onProgressUpdate(values);
 progerssDialog.setProgress(values[0]);
 }
 } 
}

 

【Android 】零基础到飞升 | AsyncTask异步任务 3.7 AsyncTask异步任务 分类 Android 基础入门教程 本节引言: 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务的类:AsyncTask,我们一般是 继承AsyncTask,然后在类中实现异步操作,然后将异步执行的进度,反馈给UI主线程~ 好吧,可能有些概念大家不懂,觉得还是有必要讲解下多线程的概念,那就先解释下一些概念性的东西吧! 1.相关概念 1)什么是多线程: 答:先要了解这几个名称... 阅读详情

相关推荐

CLIP-Count代码配置以及踩坑记录

CLIP-Count代码配置以及踩坑记录

学术菜鸡 1011

android ayntask原理,AsyncTask解析

目录:* 1.AsyncTask介绍* 2.AsyncTask中提供了四个核心方法* 3.AsyncTask的注意事项* 4.AsyncTask实现原理* 5.AsyncTask执行的串行和并发AsyncTask介绍:简介:AsyncTask是一个轻量级的异步任务类,它可以在线程池中后台执行任务,可以将执行的进度和执行完成之后的结果返回到UI线程中;AsyncTask是一个抽象的泛型类,其有三个泛...

weixin_42682754的博客 182

Latex参考文献中大写字母编译后自动变成了小写,如何保持原字母大写形式

bib文件参考文献中大写自动变为小写,如何保持原大写问题。Latex: 保持参考文献大小写,overleaf文献编译后,原大写字母自动变成了小写字母,如何保持原字母大写

我的个人博客 5805

[Android] AsyncTask使用实例---加载网络图片

先上效果图。如demo_asynctask.gif 对于图片的加载效果,见链接:[Android] PorterDuff使用实例----实现新浪微博图片下载效果 本文参考链接:http://developer.android.com/reference/android/os/AsyncTask.html AsyncTask被设计成方便编写Thread与Handler交互的辅助

Sodino的专栏 8206

华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南

在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在

weixin_31309419的博客 352

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。

ik678901的博客 1782

android异步任务 访问网络 加载图片 解决方案大集合

1. Handler + Thread 异步执行任务 在UI线程中开启子线程,使用Handler 发消息,通知主线程更新UI 参考链接: http://my.oschina.net/keeponmoving/blog/61129 直接在UI线程中开启子线程来更新TextView显示的内容,运行程序我们会发现,如下错误:android.view.ViewRoot$CalledFromWrongThre

只有变秃 才能变强 6623

如何正确理解和获取S参数

差分四端口的S参数是由双端口S参数逐步演化而来,因此,在数学中,其各分量均可以从单端S参数推导而来,在实际的仿真和测试中,软件和测量设备也是通过获取单端S参数矩阵再进行运算得到混合S参数矩阵的,并非直接获取。

一只豌豆象的博客 5151

使用异步任务加载网络上的图片

  我们知道,如果要加载一个很耗时的操作,会阻塞主线程,这时我们可以想到开启一个新的线程,避免阻塞,在android中也有这样的问题,我们可以用异步任务来操作,异步任务也是开启一个线程,线程里面发一个消息,然后通知去改变UI。   废话不多说,我们先看一个例子:我们可以打开这个网址:http://img1.3lian.com/img2011/07/20/05.jpg可以看到一副很好看的图片,我们...

weixin_30663391的博客 184

Python 爬虫实战:雪球用户数据爬取与投资行为分析(含 API 签名算法解析)

雪球作为国内领先的投资者社区,拥有丰富的用户数据和投资信息。通过爬取雪球用户数据并进行分析,我们可以深入了解用户的持仓偏好、交易行为和投资策略,为企业和投资者提供有价值的市场洞察。

yansideyucsdn的博客 2246

手把手教你学PCIE(11.3)--pcie的认证和合规性测试

PCIe 设备的认证和合规性测试是确保设备正常工作和达到预期性能的关键步骤。通过使用 PCI-SIG 提供的测试工具和第三方测试工具,可以全面评估 PCIe 设备的物理层、链路层、事务层和互操作性,确保设备符合行业标准和规范。

MHD0815的博客 1359

异步加载网络图片(多线程,和AsyncTask)

下面实现一个异步加载网络图片的例子,加载的图片使用ListIView显示出来 异步加载图片有两种方式,多线程,和AsyncTask,其实大家都知道AsyncTask底层也是多线程来实现的 第一步。布局文件 主布局文件是一个ListVIew <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi

程序员 1905

AM芯片性能测试

目前车载FM&AM没有明确的国标,因此各家测试项目可能不同,最主要测试标准比较混乱,多是根据具体芯片的规格书以及与芯片厂商协商。信号发生器:R&S SMCV100B音频分析仪:R&S UPV AUDIO AYALYZER DC 250KHZ(AP的也可以)专用USB-I2C控制模块(不同芯片控制模块不同,例如SPI或UART的控制模块)卡农线(针对模拟声道输出,+接左/右声道,-接GND,地可接GND也可悬空)

qflook的博客 902

Android 之 AsyncTask 异步任务

答:先要了解这几个名称:应用程序,进程,线程,多线程!!应用程序(Application):为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)进程(Process)运行中的程序,系统调度与资源分配的一个独立单位,操作系统会为每个进程分配 一段内存空间,程序的依次动态执行,经理代码加载 -> 执行 -> 执行完毕的完整过程!线程(Thread):比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行!线程是由程序负责管理的!!!而进程则是由系统进行调度的!!!

leyang0910的博客 1384

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android studio for android learning (二十一 )异步任务AsyncTask加载美女图片攻略及AsyncTask源码详解

1.android 的UI线程阻超过5秒就会引发ANR(Application not responding)异常,如果等待超过3秒,你就会失去用户。2.在android中组件的启动线程被称为主线程(也称UI线程),一般不在这线程中进行耗时的工作,所以我们将线程分为两种,分别是main thread和worker thread,当应用程度运行是时,系统默认的启动线程就是主线程,主要用来加载UI,完成

dragon的专栏 2192

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

安卓 AsyncTask 异步任务

安卓异步任务实验代码(未修改)xmljava 实验代码(未修改) xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" x

Sun_XiaoChuan的博客 1793

AsyncTask异步任务

答:先要了解这几个名称:应用程序,进程,线程,多线程!!应用程序(Application):为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)进程(Process)运行中的程序,系统调度与资源分配的一个独立单位,操作系统会为每个进程分配 一段内存空间,程序的依次动态执行,经理代码加载 -> 执行 -> 执行完毕的完整过程!线程(Thread):比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行!线程是由程序负责管理的!!!而进程则是由系统进行调度的!!!

qq_25502783的博客 958

AsyncTask异步任务完成图片加载

AsyncTask异步任务完成图片加载项目gitee仓库功能需求Demo初步效果展示实现基本布局(activity_main.xml)导入相应依赖(OKHTTP)在build.gradle(:app)中添加依赖在AndroidManifest.xml中添加联网权限项目中添加OKHTTP工具类编写MyAsyncTask.java类相关核心代码基本解析编写MainActivity类 项目gitee仓库 相应项目gitee地址 免费的星星点一点 功能需求 项目所需功能为异步任务实现图片加载,异步任务使用封装好的A

mar1owe的博客 490

使用AsyncTask异步更新UI界面(加载网络图片)

使用AsyncTask异步获取网络图片,简单介绍AsyncTask的用法

骑猪追大象 2198

Android-AsyncTask异步任务(一)

需求:使用AsyncTask异步任务,下载网络图片 一、在主线程中操作耗时任务会导致异常 因为在新版Android平台不允许直接在UI线程中建立网络连接、访问网络资源。在UI线程中操作耗时任务(访问网络),将会导致android.os.NetworkOnMainThreadException异常。 1、在AndroidManifest.xml中添加网络授权 <uses-perm...

往事似水拂流年的博客 1464

Android AsyncTask 基本用法,参数和步骤理解,开启异步任务之旅

介绍: AsyncTask 可以使得我们能够轻松在 UI 线程控制后台操作和后台操作所返回结果,无需使用 Thread 和 Handler 这样的组合。 实际上 AsyncTask 是为我们所设计的关于 Thread 和 Handler 的帮助类。 AsyncTask 是经过 Android 封装、简化的异步任务实现方式,源码实现也是由 Thread 和 H

AstroGypsophila 4708

【Android】AsyncTask异步任务

文章目录AsyncTask异步任务本节引言1.相关概念1)什么是多线程2)同步与异步的概念3) Android 为什么要引入异步任务2.AsyncTask全解析1)为什么要用AsyncTask?2)AsyncTask的基本结构3.AsyncTask使用示例 AsyncTask异步任务 本节引言 本节给大家带来的是Android给我们提供的一个轻量级的用于处理异步任务的类:AsyncTask,我们一般是 继承AsyncTask,然后在类中实现异步操作,然后将异步执行的进度,反馈给UI主线程~ 好吧,可能有.

懂得一千零一种,赋予你失败的方法! 747

android异步任务AsyncTask用法

原帖 一、为什么需要异步任务?   开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的,并且这些操作必须在UI线程中执行。   单线程模型中始终要记住两条法则:     1). 不要阻塞UI线程 ;    2). 确保只在UI线程中访问Android UI控件。   当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把

ruiruiddd的博客 384
上一篇: 从0开始之android笔记
下一篇: 入门异步任务之Handler
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值