AsyncTask 和 Handler

ESP32-S3 + TB6600驱动42步进电机:从基础接线到AccelStepper库平滑加减速实战 本文详细介绍了如何使用ESP32-S3开发板和TB6600驱动器控制42步进电机,从基础接线到利用AccelStepper库实现平滑加减速控制。内容涵盖硬件连接、基础驱动代码、AccelStepper库的安装与参数调优,以及高级技巧与故障排除,帮助创客实现工业级精准控制。 阅读详情

一、AsyncTask和Handler的初步了解

    1.AsyncTask的初识

         介绍:http://blog.sina.com.cn/s/blog_8417aea80100t6y2.html

         使用实例:http://blog.youkuaiyun.com/qianfu111/article/details/10200105

            附上使用实例中的代码

             MainActivity:

               

package com.example.mygeneralutil;

import java.net.URI;

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

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Button mDownloadBtn;
	private Button mCancelBtn;
	private ImageView mImage1;
	private ImageView mImage2;
	private ProgressBar mProgress1;
	private ProgressBar mProgress2;
	private GetLogoFromInternet mTask;
	private String TAG = "GetLogoFromInternet";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.asynctask_activity);
		initComponent();
	}

	private void initComponent() {

		mDownloadBtn = (Button) findViewById(R.id.button1);
		mDownloadBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				mTask = new GetLogoFromInternet();
				mTask.execute(
						"http://d.hiphotos.baidu.com/album/w%3D2048/sign=6b4e0cbb023b5bb5bed727fe02ebd439/7dd98d1001e939016245802e7aec54e736d1965e.jpg",
						"http://a.hiphotos.baidu.com/album/w%3D2048/sign=4a44fc70342ac65c67056173cfcab311/b8389b504fc2d562f5f6f0fde61190ef76c66c27.jpg");

			}
		});
		mCancelBtn = (Button) findViewById(R.id.button2);
		mCancelBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				mTask.cancel(true);
			}
		});

		mImage1 = (ImageView) findViewById(R.id.imageView1);
		mImage2 = (ImageView) findViewById(R.id.imageView2);
		mProgress1 = (ProgressBar) findViewById(R.id.progressBar1);
		mProgress2 = (ProgressBar) findViewById(R.id.progressBar2);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	class GetLogoFromInternet extends AsyncTask<String, Integer, Bitmap> {

		private Bitmap bitmap = null;

		@Override
		protected void onPreExecute() {
			mImage1.setImageBitmap(null);
			mImage2.setImageBitmap(null);
			mProgress1.setProgress(0);
			mProgress2.setProgress(0);
			Log.e(TAG, "onPreExecute");
		}

		@Override
		protected Bitmap doInBackground(String... params) {
			publishProgress(0, 0);

			HttpClient hc = new DefaultHttpClient();
			publishProgress(30, 0);
			HttpGet hg = new HttpGet();
			Bitmap bitmap2 = null;
			try {
				hg.setURI(new URI(params[0]));
				HttpResponse response = hc.execute(hg);
				bitmap = BitmapFactory.decodeStream(response.getEntity()
						.getContent());
				publishProgress(100, 30);

				hg.setURI(new URI(params[1]));
				HttpResponse response2 = hc.execute(hg);
				bitmap2 = BitmapFactory.decodeStream(response2.getEntity()
						.getContent());

			} catch (Exception e) {
				Log.e(TAG, "" + e.getMessage());
			}
			publishProgress(100, 100);
			Log.e(TAG, "doInBackground");
			// mImage1.setImageBitmap(bitmap);//error
			return bitmap2;

		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			mProgress1.setProgress(values[0]);
			mProgress2.setProgress(values[1]);
			Log.e(TAG, "onProgressUpdate");
		}

		@Override
		protected void onPostExecute(Bitmap result) {
			if (result != null) {
				mImage1.setImageBitmap(bitmap);
				mImage2.setImageBitmap(result);
				Toast.makeText(MainActivity.this,
						"get image from network successful", Toast.LENGTH_SHORT)
						.show();
			} else {
				Toast.makeText(MainActivity.this,
						"get image from network error", Toast.LENGTH_SHORT)
						.show();
			}
			Log.e(TAG, "onPostExecute");
		}

		@Override
		protected void onCancelled() {
			mProgress1.setProgress(0);
			mProgress2.setProgress(0);
			Log.e(TAG, "onCancelled");
		}

	}
}
    

         布局文件:

          

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical" >

            <ProgressBar
                android:id="@+id/progressBar1"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="150dp"
                android:layout_height="150dp" />

            <ProgressBar
                android:id="@+id/progressBar2"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="150dp"
                android:layout_height="150dp" />

            <Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="download image" />

            <Button
                android:id="@+id/button2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="cancel download image" />
        </LinearLayout>
    </ScrollView>

</LinearLayout>

    2.Handler的初识

      介绍:主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 

     用法:之前曾使用过

 

二、AsyncTask 和 Handler的异同点

     http://blog.sina.com.cn/s/blog_8417aea80100t6y2.html

     http://blog.youkuaiyun.com/onlyonecoder/article/details/8484200

Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践) axios 用来在前端页面发起一个异步请求,请求之后页面不动,响应回来刷新局部.1.为什么不使用 ajax 呢?官方:在 jQuery 中推荐使用 ajax 技术, Vue 里面不推荐使用 jQuery 框架,因此 Vue 更推荐使用 axiox 异步请求库(axios并不是 vue 官方库).2.axios 特性可以从浏览器中创建 XMLHttpRequests可以从 node.js 中创建 http 请求.支持 Promise API.支持拦截请求和响应.转换请求数据和响应数据. 阅读详情

相关推荐

DOTween回调函数的隐藏技巧:优化你的Unity动画流程

本文深入探讨了DOTween回调函数在Unity动画开发中的高级应用技巧,帮助开发者优化动画流程。通过分析回调机制、链式应用模式和大规模动画系统管理,提升性能与可维护性,特别适合需要高效处理复杂动画场景的Unity开发者。

weixin_27945229的博客 319

异步一般处理程序的用法

一、新建空的WEB项目最好是.net4.5。    二、新建一个一般处理程序,修改IHttpHandler为HttpTaskAsyncHandler,然后敲入如下代码,开始执行。    /// <summary> /// AsyncHandler 的摘要说明 /// </summary> public class As...

a616735104的博客 302

手把手教你用NetToPLCsim搭建西门子S7-1200仿真环境(附避坑指南)

本文详细指导如何利用NetToPLCsim与PLCSIM搭建西门子S7-1200仿真环境,实现无硬件条件下的PLC程序测试与上位机通信开发。内容涵盖软件选型、环境部署、关键参数配置及通信测试,并重点提供了连接失败、数据读写错误等常见问题的深度避坑指南,帮助工程师高效构建可靠的虚拟调试工作流。

a3b4c5的博客 614

Handler和AsyncTask的使用及优缺点比较

Handler和AsyncTask的使用及优缺点比较

zsr0526的博客 3980

Day470&471.Netty概述&Netty高性能架构设计 -netty

Netty概述 一、原生 NIO 存在的问题 NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。 JDK NIO

阿昌爱Java 1572

离线AI实战指南:本地部署大模型处理PDF/Word/Excel

离线AI是指在无网络、不上传数据前提下,于个人设备运行大语言模型并完成文档理解、多轮对话与代码辅助等任务的技术方案。其核心依赖本地模型推理、文档解析向量化和轻量级对话调度三大能力。随着Phi-3、Qwen2、Llama3等轻量化开源模型普及,以及Ollama、LM Studio等易用工具成熟,普通用户已可在主流笔记本上实现PDF摘要、合同比对、代码注释等真实办公场景。本文聚焦离线AI的硬件适配、模型选型、文件处理链路与知识库构建,尤其强调中文OCR支持、结构化文档提取与CPU/GPU混合推理优化,助力非开发

weixin_31968639的博客 495

异步HTTPHandler的实现

使用APM的方式实现 using System; using System.Web; using System.Threading; class HelloWorldAsyncHandler : IHttpAsyncHandler { public bool IsReusable { get { return false; } } public HelloWo...

weixin_30810239的博客 183

Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示

调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。

whik1194的博客 758

使用Handler机制实现简单的Http异步请求

使用Handler实现简单的Android异步请求框架 为了避免卡顿等问题,Android中不允许在子线程中更新UI,这给开发过程中带来了一点小障碍,为了解决这个问题,有几种方法可以使用 1、使用StrictMode强制在子线程中更新UI 这种方式简单粗暴,会带来肉眼可见的延迟,不建议使用 2、使用runOnUiThread更新 这种方式也比较简单,和创建子线程的写法几乎一致 ru...

qq_23594799的博客 666

Oracle11g下载与安装(windows)

一、Oracle11g下载 二、安装准备 三、执行安装步骤 四、测试连接 附:Oracle11g服务说明

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 2万+

解决gradle下载慢的问题

allprojects块的repositories用于多项目构建,为所有项目提供共同所需依赖包。而子项目可以配置自己的repositories以获取自己独需的依赖包。buildScript块的repositories主要是为了Gradle脚本自身的执行,获取脚本依赖插件。根级别的repositories主要是为了当前项目提供所需依赖包。慢的问题在于下载时链接的是官网,而官网下载速度太慢;1、解决gradle不同版本下载慢的问题。但是这个镜像站的版本不全,低版本可以用;有公司做的国内镜像站;

weixin_42551921的博客 2055

Handler、AsyncTask

1特点 1. 传递Message。用于接受子线程发送的数据, 并用此数据配合主线程更新UI。 在Android中,对于UI的操作通常需要放在主线程中进行操作。如果在子线程中有关于UI的操作,那么就需要把数据消息作为一个Message对象发送到消息队列中,然后,由Handler中的handlerMessage方法处理传过来的数据信息,并操作UI。当然,Handler对象是在主线程中初始化的,因为

an__qi的专栏 462

YOLOv11改进,YOLOv11结合DynamicConv(动态卷积),CVPR2024,二次创新C3k2结构

DynamicConv(动态卷积)是一个用于提高卷积神经网络(CNN)性能的技术,核心思想是动态地生成卷积核(filter),而不是使用固定的卷积核。通过引入更多的计算灵活性和适应性来增强卷积操作的表达能力,进而提升模型的性能。专家选择:DynamicConv 通过引入多个“专家”(experts),每个专家学习特定的卷积模式。输入图像的不同部分会选择不同的专家进行卷积。动态卷积核生成:根据输入的不同特征,专家网络动态地生成卷积核,而不是使用固定的卷积核。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2263

AsyncTask和Handler对比

1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控 使用的缺点: l  在使用多个异步操作和并需要进行U

qq_29443203的博客 619

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

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

Android中的Handler和AsyncTask的区别

问题的由来最近老看见有人问Android中的Thread与AsyncTask的区别,因此研究了一下,总结如下。 第一,如果真心想弄清楚这两个的具体用法,最好的方法是把Message、MessageQueue、Looper、Handler、HandlerThread和AsyncTask这六个类的源代码全部看懂。 第二,如果觉得困难,那么就来看看我的这篇总结文章吧。Handler类,可以理解为消息/

LogicTeamLeader的专栏 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android中使用Handler和AsyncTask进行异步操作

1.Handler Handler相关说明: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI。 解释:安卓的UI线程(即OnCreate函数创建的线程)是线程非安全的。也就是说,在UI线程中,使用sleep这样的函数会导致整个线程延迟,但是我们在安卓开发中,往往会经常遇到一些延迟比较厉害的操作,(例如通过HTTP获取数据信息)如果放在主线程中,则会影响UI界面的渲染

逍遥飞鹤的专栏 2567

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

AsyncTask 和 Handler的优缺点

Android不允许在子线程中更新UI,但必须在子线程中执行一些耗时任务,根据执行结果来更新相应的UI控件,可用一套异步消息处理机制。AsyncTask实现的原理和适用的优缺点AsyncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.使用的优点: 简

StruggleOldBoy的博客 625

AsyncTask和Handler的对比

AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l 简单,快捷 l 过程可控 使用...

djh10000的博客 118

AsyncTask和Handler的区别

AsyncTask是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。使用的优点: 简单、快捷 过程可控 使用的缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来 asyncTask和线程池Android 原生的 AsyncTask.java 是对线程

Tianhui Yang的个人网站:aitech.me 580

AsyncTask和Handler和runOnUiThread()

AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控         使用的缺点: l

Coding... 983

Android中的Handler和AsyncTask

1、Handler简介 Handler在android里负责发送和处理消息。它的主要用途:   1)按计划发送消息或执行某个Runnanble(使用POST方法),类似定时器;   2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程);    默认情况下,Handler接受的是当前线程下的消息循环实例(使用Handler(Looper looper)、Handle

ljtyzhr的专栏 769

AsyncTask和Handler的优缺点比较

AsyncTask实现的原理和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: 简单,快捷 过程可控       使用的缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. H

独自等待 6万+

android AsyncTask介绍 AsyncTask和Handler对比

1 ) AsyncTask实现的原理,和适用的优缺点AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.使用的优点:l  简单,快捷l  过程可控       使用的缺点:l  在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.2 )H...

Evan 496

Android的AsyncTask和Handler

android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l 

小点滴 626
上一篇: 关于ListView的若干问题
下一篇: 图片优化
觅己
博客等级 码龄11年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值