如何优化Android异步请求服务器数据?

服务器
在互联网驱动的世界中,移动应用程序需要共享和接收来自其产品的后端(例如,来自数据库)以及来自第三方来源(如Facebook和Twitter)的信息,这些交互通常通过RESTful API进行。当请求数量增加时,这些请求的生成方式对于开发变得非常关键,因为获取数据的方式确实会影响应用程序的用户体验。

 在互联网驱动的世界中,移动应用程序需要共享和接收来自其产品的后端(例如,来自数据库)以及来自第三方来源(如Facebook和Twitter)的信息,这些交互通常通过RESTful API进行。当请求数量增加时,这些请求的生成方式对于开发变得非常关键,因为获取数据的方式确实会影响应用程序的用户体验。

[[252308]]

同步请求的行为在服务器响应之前保持空闲状态,同步请求会阻止接口增加计算时间并使移动应用程序无响应。于是就异步请求出现,当客户端向服务器发出请求时,服务器将请求分派给事件处理程序,注册回调并继续执行下一个请求,当响应可用时,将使用结果响应客户端。这是一种更好的方法,因为异步请求允许独立执行任务。

如何优化Android异步请求服务器数据?

上图显示了两种编程方法在客户端 - 服务器模型中的不同之处。在Android中,UI线程(通常称为主线程)是基于与异步编程相同的原理。

Android UI工具包不是线程安全的,如果工作线程(执行进行网络调用的任务)更新Android UI工具包,则可能导致未定义和意外的行为,追踪这可能是困难且耗时的。单线程模型确保UI不会同时被不同的线程修改,因此,如果我们使用来自网络的图像更新ImageView,则工作线程将在单独的线程中执行网络操作,而ImageView将由UI线程更新,这可确保操作是线程安全的。UI线程提供必要的同步,它还有助于UI线程始终是非阻塞的,因为实际任务在工作线程的后台发生的。

总之,请遵循Android开发中的两个简单规则:

  • 不应阻止UI线程。
  • 不应从非UI工作线程直接更新UI工具包。

在Android应用如果您需要在用户与应用程序交互时在主线程之外执行工作,***使用AsyncTask或Volley等网络库。

以下是使用AsyncTask实现异步工作线程的方法:

  1. Subclass AsyncTask实现该onPreExecute()方法,它将创建一个toast消息,表明网络调用即将发生。
  2. 实施doInBackground(Params...)方法,顾名思义,doInBackground是工作线程进行网络调用并保持主线程免费。
  3. 由于工作线程无法直接更新UI,因此我实现了自己的postExecute(Result)方法,该方法将从网络调用中提供结果并在UI线程中运行,以便可以安全地修改用户界面。
  4. 后台任务的进度可以使用该publishProgress()方法从工作线程发布,并且可以使用该onProgressUpdate(Progress...)方法在UI线程上更新。
  5. ***,使用execute()UI线程中的方法调用异步任务。

让我们进一步继续了解Volley:

  1. Volley运行一个缓存处理线程和一个网络分派线程池。
  2. 网络调用请求首先由缓存线程进行分类。如果响应可以从缓存中提供,则缓存的响应将被解析CacheDispatche并传递回主线程UI线程。
  3. 如果结果在缓存中不可用,则需要进行网络请求以获取所需数据,请求将放入网络队列中。
  4. ***个可用的网络线程(NetworkDispatcher)从队列中获取请求,然后,它执行HTTP请求,解析工作线程上的响应并将响应写入缓存。然后它将解析后的响应传递回主线程。

如何优化Android异步请求服务器数据?

​总结:

  • Android中的UI线程或主线程执行将事件分派给UI工具包的工作,并负责将消息队列中的请求出列以通知窗口小部件采取操作,这就是为什么UI线程始终是非阻塞的重要性。
  • Android有自己的HTTP客户端库,例如HttpURLConnection它可以帮助您执行同步网络调用。为了保持主线程不阻塞,需要在后台运行的工作线程中执行网络调用。
  • Android的AsyncTask库可以帮助在后台运行任务,并确保主线程是非阻塞的。它还确保后台任务不直接更新UI,相反,它将结果返回到UI线程。
  • AsyncTask有其局限性,例如无法缓存响应而无法处理并行请求,当后台任务运行时,它也不能正常处理屏幕旋转等场景。
  • 使用Volley进行异步网络调用是开发Android应用程序的更简洁的解决方案,Volley拥有一系列强大的功能,例如缓存,请求取消和优先级排序。
  • Volley可以处理多种请求类型,例如JSON,图像和文本,并且它比AsyncTask表现更好。
责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-09-26 09:19:38

服务器优化

2011-08-01 10:49:12

服务器

2012-01-18 11:25:36

服务器优化

2009-04-03 15:14:42

微软优化SQL Server

2009-01-08 17:43:17

服务器性能磁盘

2011-03-11 15:52:59

LAMP优化

2009-03-20 09:46:52

服务器虚拟化虚拟机管理

2022-05-05 09:27:31

Linux服务器优化

2010-05-19 10:31:07

IIS服务器

2018-09-11 08:37:05

高并发服务器优化

2011-07-11 09:39:22

虚拟服务器虚拟化

2022-02-16 14:10:51

服务器性能优化Linux

2021-11-29 11:13:45

服务器网络性能

2019-01-09 13:07:26

Tomcat服务器优化

2023-07-04 07:19:17

物理服务器网络

2020-02-12 13:58:24

服务器高级优化

2013-07-23 09:51:32

Tomcat性能优化服务器性能优化

2021-01-13 05:27:02

服务器性能高并发

2009-08-11 08:38:15

Linux服务器硬盘性能实用技巧

2011-06-29 10:06:23

Linux服务器优化
点赞
收藏

51CTO技术栈公众号