Android之异步任务加载网络数据

android获取接口展示到ListView上(带效果图) 首先写权限 <!-- 网络权限 --> <uses-permission android:name="android.permission.INTERNET"></uses-permission> MainActivity布局代码 &a 阅读详情

对异步任务加载网络数据的回答:

在Android中提供了一个异步任务的类AsyncTask,简单来说,这个类中的任务是运行在后台线程中的,并可以将结果放到UI线程中进行处理,它定义了三种泛型,分别是Params、Progress和Result,分别表示请求的参数、任务的进度和获得的结果数据。

 

我之前总结了使用异步任务的原因有三点:

1)是因为AsyncTask使用了线程池技术,而且其中的方法很容易实现调用

2)是因为AsyncTask可以调用相关的方法,在开启子线程前和后,进行界面的更新

3)是因为一旦任务多了,不用每次都new新的线程,可以直接使用

 

如果我们查看官方文档,异步任务中的方法的执行顺序是这样的:

onPreExecute()【执行前开启】--- > doInBackground() --- > onProgressUpdate() --- > onPostExecute()

具体的来说,当一个异步任务开启后:

首先会调用onPreExecute()方法:

这个方法在异步执行时立即被UI线程调用,这一步通常用来设置任务,作为任务加载的准备工作。通常会在这个方法中弹出一个提示框,提示用户加载的进度。

第二个方法doInBackground():

这个方法是执行在子线程中的。在onPreExecute()执行完后,会立即开启这个方法,在方法中可以执行耗时的操作。需要将请求的参数传递进来,发送给服务器,并将获取到的数据返回,数据会传给最后一步中;这些值都将被放到主线程中,也可以不断的传递给下一步的onProgressUpdate()中进行更新。可以通过不断调用publishProgress(),将数据(或进度)不断传递给onProgressUpdate()方法,进行不断更新界面。

3)、onProgressUpdate():

这个方法是执行在主线程中的。publishProgress()在被调用后,才开启的这个方法,它在何时被开启是不确定的,这个方法用来在后台操作仍在执行的时候在用户界面显示不同形式的进度。比如它可以推动进度条进度或者在文本里显示log信息。

4)、onPostExecute():

这个方法是执行在主线程中的。当后台的子线程执行完毕后才调用此方法。doInBackground()返回的结果会作为参数被传递过来。可以在这个方法中进行更新界面的操作。

最后创建AsyncTask自定义的类,调用execute()方法开启异步任务。

 

结合项目:

我们在使用异步任务的时候,根据这些原理和步骤就可以了,我们在做项目时会经常使用到异步任务,比如说我在做彩票的这个项目中,有一个部分,是购彩大厅中的销售期号和截止时间,我这里使用异步获取这个彩种的当前的销售信息.

我在实现一个功能的时候总会先想到三个问题,我们要实现什么?我们要怎么实现?我们为什么这样实现?

首先我们要实现什么呢?就是从服务器上获取到当前的销售信息.

那么我们要怎么实现呢?首先我们得在购彩大厅这个类中增加一个获取当前销售信息的方法,这个方法会到服务器中去获取数据.然后我先想到的是在这个方法中开启一个线程,在这个线程中实现访问网络的操作,由于我们做了访问网络的操作,所以在开启这个线程的时候还要判断一下网络。添加判断网络的代码之后,我又发现,每次访问网络的时候,我们都要实现这几行代码。解决这个问题,我是在getCurrentIssueInfo中,只保留了new MyThread().start(),而把判断网络这一步放到MyThread中的start()中去.这时候,当在getCurrentIssueInfo中start的时候,会调用新线程的start()方法,这里的super.start()就是方法中的start,如果联络连接好则执行这个start,然后调用run方法,执行网络的操作;否则,就弹出没有网络的提示信息。

这是实现这个功能的一种方式,但是我有考虑到使用系统提供的AsyncTask比Thread的效率更高,因此我又改用了AsyncTask的方式来实现从服务器上获取当前的销售信息.

创建异步任务类后,先覆写doInBackground方法,这个方法相当于Thread中的run方法,开启异步任务就要调用execute方法,它和Thread的start方法类似.

在异步任务处理中加入execute方法,但是我在查看AsyncTask源代码的时候发现这个方法是final修饰的,因此我们没办法override这个方法,我的处理方式是把这个方法复制过来,既然没办法override,就修改这个方法来使用.我们的目的是判断网络,所以在这个方法中加上网络判断语句就可以了.

然后在这个任务中增加在UI线程的操作:得复写onPreExecute和onPostExecute两个方法,这两个方法是在UI线程中执行的,就避免了使用Handler(因为使用Handler发消息处理,代码很臃肿)。

 

这样,异步任务处理的壳子就写出来了,下一步要做到就是在里面写任务。

 

我们创建一个处理公共信息的业务操作接口,在里面定义一个根据期号获取当前销售期的方法。然后把这个接口的实现类给定义出来,获取到服务器中的信息之后,在onPostExecute方法中判断返回的信息是否为空,如果为空就提示用户服务器忙,否则就更新界面,把获取的信息在界面中显示出来。

这样处理我还遇到了个问题,我这个获取当前销售信息的方法是放在购彩大厅类的构造函数中调用的,这个方法就只能被调用一次,而我们要求它时刻变化,这个时候我们就需要做出改变。我想到了两种处理的方案,一种是使用倒计时的方法——每秒刷新一次,第二种是每次进入到购彩大厅的时候,都到服务器端去获取数据。使用第二种比较方便,这时候我想要借鉴activity生命周期的方法,(进来时调用onStart、onResume、出去时调用onPause)。

我在这个界面中增加两个方法onResume和onPause,

对于onResume是在进入到界面的时候,界面内容的修改,处理耗费资源操作,在onPause方法中回收资源

 

在界面管理的类中,加入界面后,就调用onResume方法进行界面内容的修改。同时,在移除view的之前,要进行耗资源内容的移除。要做的是先判断是不是第一个view,如果不是,则可能会有耗资源的内容,就在onPause中进行耗资源的操作。

这时候就可以把获取销售信息的方法从构造函数中转移到onResume中。这样就完成了获取销售信息的功能。

 

激光三角测量法:斜射与直射式技术的原理与应用解析 本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。 阅读详情

相关推荐

TC3XX - MCAL知识点(九):PWM EB-tresos配置说明及代码浅析

脉冲宽度调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器驱动是GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。软硬件匹配关系如下:PWM直接引用的是GTM与CCU6模块,然后GTM与CCU6再关联到Port的,根据软硬件匹配关系,也能调用中断来使用,本例子没使用中断。CCU6是一个高分辨率的16位捕获和比较单元,具有特定的应用模式,主要用于交流驱动控制。特殊的工作模式支持控制无刷直流电机使用霍尔传感器或反电动势检测。

梦想技术家 2812

Android异步加载解决方案

Android的LazyLoad主要体现在网络数据(图片)异步加载数据库查询、复杂业务逻辑处理以及费时任务操作导致的异步处理等方面。在介绍Android开发过程中,异步处理这个常见的技术问题之前,我们简单回顾下Android开发过程中需要注意的几个地方。 Android应用开发过程中必须遵循单线程模型(SingleThreadModel)的原则。因为Android的UI操作并不是线程安全的,所以涉及UI的操作必须在UI线程中完成。但是并非所有的操作都能在主线程中进行,Google工程师在设计上约定,Android应用在5s内无响应的

IEC 60570-2019.pdf

IEC 60570-2019.pdf

AsyncTask异步加载图片 进度条显示进度 -- Android学习之路

AsyncTask 异步加载网络图片 并使用进度条显示进度 这里我还使用了Thread方式进行加载 作为比较

佛系编码 4073

Android专题之AsyncTask(三)异步方法操作之进度

文章目录 一、相关文章 二、前言 三、类和方法的使用 1、写AsyncTask的子类 2、主要方法 3、使用注意点 四、项目实战例子 1、捋一下AsyncTask基本流程 2、写代码 一、相关文章 Android专题之AsyncTask(一)基本概念介绍 Android专题之AsyncTask(二)简单AsyncTask例子解决线程阻塞 Android专题之AsyncTa...

鲁迷那的专栏—坚持实践后再写出来! 744

android 网络异步加载数据进度

因为会在互联网上经常获取数据,所以如果采用同步数据加载的话,那么会严重影响美观,那样用户体验很差  大数据加载之前 要等半天 并且屏幕是白的   用户会觉得没有加载,加个进度条  数据加载成功 ,进度条就消息。 ProgressDialog progressDialog = null;//首先定义一个dialog public static final int MESSAGETY

qq_28514109的博客 1171

两种方式封装Retrofit+协程,实现优雅快速的网络请求

目的 简单调用、少写重复代码 不依赖第三方库(只含Retrofit+Okhttp+协程) 完全不懂协程也能立马上手(模板代码) 用Kotlin的方式写Kotlin代码,什么意思呢?对比一下下面2个代码就知道了: mViewModel.wxArticleLiveData.observe(this, object : IStateObserver<List<WxArticleBean>>() { override fun onSucc.

A_pyf的博客 924

Android在Service中定时请求网络

一般来说,android的一些耗时的操作很多都会丢给后台服务来做,而一些公司因为安全原因,再每次请求的网络的时候请求头会隔一段时间变化一次,但是也不能每次请求网络都去拿一次请求头,所以这个时候在service后台定时请求网络获取最新的请求头然后储存起来是很有必要的,下面直接贴代码,记录一下 public static final String TAG = "TokenService"; ...

Riley_Qin的博客 4526

安卓简历技术点——熟练掌握ListView的优化及异步任务加载网络数据

对于面试,可能listview这个问题,永远高频出现,毕竟开发中,他出现的也是高频的。我先说下基本优化。

liuliuhelingdao的博客 445

刷新加载+异步线程

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff333"> <com.han

Ason_haiyu的博客 378

setOnScrollListener实现网络请求上下滑动加载数据

public class MainActivity extends Activity implements OnClickListener{          private ListView lv;    private MyAsynTask task;    private HttpURLConnection connection;    private ArrayListlist=

璋显不同专栏 911

Android studio请求网络数据ListView异步加载展示文字条目 ImageLoadler加载图片

主函数布局是一个ListView item布局是TextView和ImageView 数量的多少视情况而定 再写一个网络请求数据的类  最后面有代码: ”urlConnection 请求数据类的封装“ 类名一定要一样 封装数据类   还有别忘了依赖和权限 依赖: imageloader      compile ‘com.nostra13.univers

qq_40089806的博客 1049

网络判断

1.判断网络状态 package com.bw.qgs.shipei; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; public class NewThread { public boolean isNetWork(Context co...

qq_42828293的博客 163

android开发异步加载网络数据AsyncTask的使用

一、异步任务加载网络数据: 在android中提供了一个异步任务的类AsyncTask,简单来说,这个类中的任务是运行在后台线程中的,并可以将结果放到UI线程中进行处理,它定义了三种 泛型,分别是Params、Progress和Result,分别表示请求的参数、任务进度和获得的结果数据。 1、使用原因: 1)其中使用了线程池技术,而且其中的方法很容易实现调用。 2)可以调用相关

l1371985810的博客 3043

AsyncTask异步加载

一、异步任务加载网络数据: 在Android中提供了一个异步任务的类AsyncTask,简单来说,这个类中的任务是运行在后台线程中的,并可以将结果放到UI线程中进行处理,它定义了三种泛型,分别是Params、Progress和Result,分别表示请求的参数、任务进度和获得的结果数据。 1、使用原因: 1)是其中使用了线程池技术,而且其中的方法很容易实现调用 2)可以调用相关的方法,在开

HTYBAY的专栏 441

android在service中使用AsyncHttpClient加载网络资源

packagecom.example.service; importorg.apache.http.Header; importorg.json.JSONObject; importcom.loopj.android.http.AsyncHttpClient; importcom.loopj.android.http.JsonHttpResponseH...

weixin_34191845的博客 142

android service前台服务器,Android网络前台向服务端页面请求数据

这是一个android前台向服务端网站请求少量数据的小例子。首先设计好服务端,再来写安卓前端。一:服务端新建动态网站,在java包下新建一个类继承HttpServlet父类,重写doGet()方法,向客户端输出文字。部署这个类,把这个类的包和class文件复制到WEB-INF的classes目录下,在web.xml文件配置这个文件的网络路径。 Internet文件的代码:package andro...

weixin_36289292的博客 459

Android 使用Service实现不间断的网络请求

Android 如何在返回到桌面后,依然在后台不间断地请求服务器?

DevYuan的专栏 1万+

Android异步加载的方式

Android异步加载的方式

xiaokang666的博客 814

android异步任务加载数据界面实现

android 异步任务的一个后台方法本质是开启一个线程完成耗时操作,其他onPostExecute方法和onPreExecute方法运行在UI主线程用于更新UI界面。为了提高用户体验常见的异步任务加载方式现在总结如下: 1、异步加载界面效果如下: 关键代码如下所示: /** * 异步任务给列表加载数据 */ private void fillData(){ new A

Coder_android 5598
上一篇: Android之屏幕适配问题
下一篇: Android之多线程
ChatHello
博客等级 码龄10年 43粉丝 58原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值