Android系统中本身是有下载机制的,比如浏览器使用的DownloadManager。可遗憾的是,DownloadManager只提供给浏览器使用,一般的应用程序没法调用它。 另外,如果下载调用频繁的话,使用DownloadManager其实是很没有效率的做法。为了解决这些问题,我想我们最好的办法就是自己实现下载,本文就是基于HTTP协议的下载的一些简单介绍。 一、HTTP协议简介 HTTP
转载 2023-07-14 11:00:36
56阅读
# Android 网络封装 ![Pie Chart](chart.png) ## 引言 在Android开发中,网络请求是一个常见的需求。而在网络请求中,处理异步操作和线程切换是非常繁琐的。为了解决这个问题,Google在Kotlin语言中引入了(Coroutines)的概念。是一种轻量级的线程,可以简化异步编程的复杂性。本文将介绍如何使用封装网络请求。 ## 介绍
原创 2023-11-18 14:40:12
140阅读
这篇是许久之前初学程之时整理的笔记,今天偶然翻到便整理成md发出来。现在的我真的越来越难总结出这么多又臭又长的东西了。定义官方描述:通过将复杂性放入库来简化异步编程。程序的逻辑可以在中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、订阅相关事件、在不同线程(甚至不同机器)上调度执行,而代码则保持如同顺序执行一样简单。与线程的区别是编译器级别的
Android网络请求1————HTTP协议一.目录 文章目录Android网络请求1————HTTP协议一.目录二.http协议简介2.http的工作原理3.http的特点三.http协议的响应步骤1. 建立TCP连接2. Web浏览器向Web服务器发送请求命令3. Web浏览器发送请求头信息4.Web服务器的应答5. web服务器发送应答头信息6. web服务器向浏览器发送数据7. web
本文是介绍 Android 系列中的第二部分,这篇文章主要会介绍如何使用来处理任务,并且能在任务开始执行后保持对它的追踪。 保持对的追踪本系列文章的第一篇,我们探讨了适合用来解决哪些问题。这里再简单回顾一下,适合解决以下两个常见的编程问题:处理耗时任务 (Long running tasks),这种任务常常会阻塞住主线程;保证主线程安全 (Main-safety),
转载 2024-03-10 15:16:17
85阅读
本人水平有限,文章中如果出现什么不正确或者模糊的地方,还请各位小伙伴留下评论,多多指教 : ) Http概述什么是HttpHttp基本工作流程HttpUrlConnection小栗子1_通过WebView加载网页小栗子2_下载网络图片并显示 Http概述什么是Http采用知识点的形式,个人认为会更加高效直观一点。 - HTTP,即超文本传输协议 - 它定义了浏览器(客户端的一种),如何向服务器
前言在Kotlin(后简称)出来之后,颠覆了我们很多工具类的封装方式,大大简化了我们很多api的调用,并且使异步操作逻辑更清晰了其中一个很标志性的地方就属网络请求了,以前的网络请求方式声明很麻烦,请求和响应也很麻烦,总结一句话就是啰嗦且易出错ps:最终的使用方式示例:使用网络请求的进化过程:1.从一开始的HttpURLConnection的一把梭,直接一个请求写一串代码(代码太多就不写了)
是一个并发方案。也是一种思想。 传统意义上的是单线程的,面对io密集型任务他的内存消耗更少,进而效率高。但是面对计算密集型的任务不如多线程并行运算效率高。 不同的语言对于都有不同的实现,甚至同一种语言对于不同平台的操作系统都有对应的实现。 我们kotlin语言的是 coroutines for jvm的实现方式。底层原理也是利用java 线程。
线程并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的  多线程之间共享全局变量在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据缺点就是,线程是对全局变量随意更改可能造成多线程之间对全局变量的混乱(即线程非安
作用域与上下文作用域本质是一个接口,既然是一个接口,那么它就可以被某个类去实现(implement),实现它的那个类,也就具备了一些能力。class MyClass: CoroutineScope { // MyClass就具备了CoroutineScope的一些能力 }那么它具备了哪些能力呢?当然是启动的能力和停止的能力。除了runBlocking有一些特殊外,launch和
概述          最近又要替换网络库了,导致所有的业务代码都要替换且要重新测试回归。为了防止后续再遇到这样事情,降低替换核心库的成本,现利用网络库进行封装。 理想API调用方式 launch { val response = TestReq(q = "电脑").request<TestResponse>() Toast.makeText(this, respon
转载 2021-06-17 15:52:53
906阅读
简介在项目中使用一段时间后,确实能体会到对于异步回调的简化,让我觉得最方便的是,作为调用方时无需关心应该使用哪个线程来执行函数,通常写函数时就可以定义好线程。是Google官方推荐的Android异步编程解决方案,具有轻量,内存泄漏更少,内置取消支持,Jetpack集成等特点在网上收集了一些对于的解释:① 是轻量级线程可以换个说法,就是方法调用封装成类线程的API。方法调用
本系列文章Android 上的(第一部分):了解背景Android 上的(第二部分):入门Android上的 (第三部分): 实际应用Android 上的(第二部分):入门背景回顾在第一部分中,我们探讨了擅长解决的问题。回顾一下,是解决两个常见编程问题的好方法:长时间运行的任务是花费太长时间阻塞主线程的任务。Main-safety允许您确保可以从主线程调用任何挂起函数。 为
转载 2023-07-05 12:11:54
268阅读
一、进程和线程,简单对比1.1 进程和线程进程是Windows系统中的概念,包含着运行一个程序所需要的基本资源。一个正在运行的应用程序在操作系统中被视为一个进程(是系统进行资源分配和调度的单位),进程可以包括一个或多个线程(通过CPU调度和分派线程,这些线程共享进程资源)。1.2 线程和协Unity是单线程(没用多线程概念,可以写成多线程thread,但是只有主线程才能访问Unity3D的对
# 在 Android 中实现并行请求 在现代 Android 应用开发中,是一种非常有用的工具,可以帮助我们实现更高效的异步编程。当我们需要并行请求多个网络服务时,特别适合。这篇文章将指导你如何在 Android 中使用 Kotlin 并行发起网络请求。 ## 1. 整体流程 我们首先从整体流程开始。以下是实现并行请求的步骤: | 步骤 | 描述 | | ---- |
原创 11月前
95阅读
''' 是实现并发编程的一种方式, 通过 async/await 语法进行声明,是编写异步应用的推荐方式 async 修饰词声明异步函数,于是,这里的 crawl_page 和 main 都变成了异步函数。 print(crawl_page('')): 调用异步函数,我们便可得到一个对象(coroutine object) await 调用可等待对象, 可等待对象有三种主
文章目录golang常用库之-ants包 | golang池(goroutine池)背景什么是ants? 使用demo官方demo golang常用库之-ants包 | golang池(goroutine池)背景使用go关键字就可以方便快捷的创建一个goroutine,受限于服务器硬件内存大小,如果不对goroutine数量进行限制,会出现Out of Memory错误。通过池限制g
转载 2024-01-03 09:55:43
76阅读
如果你需要访问多个服务来完成一个请求的处理,比如实现文件上传功能时,首先访问 Redis 缓存,验证用户是否登录,再接收 HTTP 消息中的 body 并保存在磁盘上,最后把文件路径等信息写入 MySQL 数据库中,你会怎么做?首先可以使用阻塞 API 编写同步代码,直接一步步串行即可,但很明显这时一个线程只能同时处理一个请求。而我们知道线程数是有限制的,有限的线程数导致无法实现上万级别的并发连接
转载 2023-12-04 19:14:15
147阅读
之前介绍了修改sdk后的代码大体架构,其实修改代码倒不是什么麻烦的事,无非实现一种新功能,下面说说真正让人抓狂的事——封装和集成sdk。sdk打包首先要打包,如果是纯代码的sdk导出成jar包就行了;像我这样sdk里还包含图片资源要打包aar。编译成功用gradle直接打包成release包: 模块名称为downloadsdk,生成的aar就在download/build/output/aar路
转载 2023-07-01 17:36:33
74阅读
最近业余时间在写一个小游戏。在为客户端封装socket层时头脑一热,有了一些新的想法, 在这里记录一下。 客户端使用的是Unity3d引擎。而在Unity3d中,基础的socket库只提供两种模式,一种是阻塞模式,一种是异步callback模式。 一般都需要基于这两种模式下进一步封装,才可以更方便的使用。 咨询了几个做客户端的并搜了一下,发现大家的惯用手法都是开一个线程去使用socket阻
  • 1
  • 2
  • 3
  • 4
  • 5