赞
踩
手机上的浏览器
,或者是具备网络访问功能的App
来获取资源
移动端应用
来获取服务器上的商品信息和生活信息
。因此具备网络交互能力
的HarmonyOS APP是目前HarmonyOS应用市场的主力军。,主要包括如何使用
多线程完成异步操作、如何
调用Http接口实现网页内容获取、如何
实现文件上传和下载操作、如何
运用WebSocket协议与服务器进行交互`。http接口调用模式
,这也是和浏览器访问网络资源采用的方法一致。使用该接口访问数据的步骤如下:引入依赖
import http from '@ohos.net.http';
创建HttpRequest对象
:该对象里面包括发起请求
、中断请求
、订阅/取消订阅
HttpResponse Header 事件。
let httpRequest = http.createHttp();
HttpRequestOptions
RequestMethod
发起http请求:根据URL地址和相关配置项,发起Http网络请求,使用callback方式作为异步方法。
request(url: string, options: HttpRequestOptions, callback: AsyncCallback<HttpResponse>): void
回调函数的返回值类型
。示例
httpRequest.request(
"http://news.whu.edu.cn/info/1015/65428.htm",
{ method: 'POST', // 可选,默认为“GET”
header: {
'Content-Type': 'application/json'
},
extraData: "data to post",
readTimeout: 60000, connectTimeout: 60000 },(err, data) => {
if (!err) {
console.info('Result:' + data.result);
} else {
console.info('error:' + err.code);
}});
从指定位置上传或下载文字,图片及视频
等。上传和下载的特点是他们的操作方向基本是相反的,但调用的函数基本一致。下载任务操作步骤如下:引入依赖
开启下载任务
import request from '@ohos.request';
download(config: DownloadConfig, callback: AsyncCallback<DownloadTask>): void
订阅下载进度
import request from '@ohos.request';
export default {
data:{downloadTask:{}},
onInit() {
request.download({ url:
'http://news.whu.edu.cn/__local/6/77/0C/D9A3FB6FB41B582886E94D06F63_B82B59FD_34A0
0.jpeg' }, (err, data) => {
if (err) {
console.error('Failed to request the download. Cause: ' + JSON.stringify(err));
return;
}
this.downloadTask = data;
});
this.downloadTask.on('progress',(upsize, totalsize) =>{
console.log('download image size'+upsize)
});
}
}
WebSocket
是HTML5规范
提出的一种协议
,也是基于TCP协议
的,和应用层Http协议
是并存的两种协议。HTML5 Web Sockets
规范定义了Web Sockets API
,支持页面使用Web Socket协议与远程主机进行全双工的通信。createWebSocket方法
创建WebSocket对象,然后通过connect方法连接到服务器
。当连接成功后,客户端会收到open事件的回调
,之后客户端就可以通过send方法与服务器进行通信
。当服务器发信息给客户端时,客户端会收到message事件的回调
。当客户端不要此连接时,可以通过调用close方法主动断开连接
,之后客户端会收到close事件的回调
。ws.connect(defaultIpAddress, (err, value) => {
if (!err) {
console.log("connect success");
} else {
console.log("connect fail, err:" + JSON.stringify(err));
}
});
import webSocket from '@ohos.net.webSocket';
var defaultIpAddress = "ws://10.211.55.4:8443/v1";
let ws = webSocket.createWebSocket();
ws.on('open', (err, value) => {
console.log("on open, status:" + value.status + ", message:" + value.message);
// 当收到on('open')事件时,可以通过send()方法与服务器进行通信
ws.send("Hello, server!", (err, value) => {
if (!err) {
console.log("send success");
} else {
console.log("send fail, err:" + JSON.stringify(err));
}
});
});
ws.on('message', (err, value) => {
console.log("on message, message:" + value);
// 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接
if (value === 'bye') {
ws.close((err, value) => {
if (!err) {
console.log("close success");
} else {
console.log("close fail, err is " + JSON.stringify(err));
}
});
}
});
进程
是具有一定独立功能的程序
在某个数据集合上
的一次运行活动
,进程是操作系统进行资源分配和调度(CPU,内存和I/O)
的一个独立单位。
线程
是进程的一部分,是CPU调度和分派的基本单位
,一个进程可以拥有多个线程,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的CPU资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源(除了CPU之外的其他资源,如内存和I/O)。“主线程”
的执行线程。
主线程
又称UI线程
,默认情况下,所有的操作都是在主线程上执行。如果需要执行比较耗时的任务(如下载文件、查询数据库),可创建其他线程来处理。TaskDispatcher
是一个任务分发器,它是Ability分发任务的基本接口,隐藏任务所在线程的实现细节。
TaskDispatcher具有多种实现,每种实现对应不同的任务分发器。在分发任务时可以指定任务的优先级
,由同一个任务分发器
分发出的任务具有相同的优先级
。系统提供的任务分发器有GlobalTaskDispatcher、ParallelTaskDispatcher、SerialTaskDispatcher、SpecTaskDispatcher。
GlobalTaskDispatcher
:全局并发任务分发器,由Ability执行getGlobalTaskDispatcher()获取
。适用于任务之间没有联系的情况。一个应用只有一个GlobalTaskDispatcher,它在程序结束时才被销毁。
ParallelTaskDispatcher
:并发任务分发器,由Ability执行createParallelTaskDispatcher()创建
并返回。ParallelTaskDispatcher不具有全局唯一性,可以创建多个。开发者在创建或销毁dispatcher时,需要持有对应的对象引用。
SerialTaskDispatcher
:串行任务分发器,由Ability执行createSerialTaskDispatcher()创建
并返回。由该分发器分发的所有的任务都是按顺序执行,但是执行这些任务的线程并不是固定的。
SpecTaskDispatcher
:专有任务分发器,绑定到专有线程上的任务分发器。目前已有的专有线程为UI线程,通过UITaskDispatche
r进行任务分发。UITaskDispatcher是绑定到应用主线程的专有任务分发器, 由Ability执行getUITaskDispatcher()创建
并返回。由该分发器分发的所有的任务都是在主线程上按顺序执行,它在应用程序结束时被销毁。
对同步syncDispatch来说,主线程派发任务并在当前线程等待任务执行完成。在返回前,当前线程会被阻塞。
TaskDispatcher globalTaskDispatcher =
getGlobalTaskDispatcher(TaskPriority.DEFAULT);
globalTaskDispatcher.syncDispatch(new Runnable() {
@Override
public void run() {
HiLog.info(LABEL_LOG, "sync task1 run");
}});
HiLog.info(LABEL_LOG, "after sync task1");
globalTaskDispatcher.syncDispatch(new Runnable() {
@Override
public void run() {
HiLog.info(LABEL_LOG, "sync task2 run");
}});
HiLog.info(LABEL_LOG, "after sync task2");
对异步asyncDispatch来说,主线程派发任务后立即返回,返回值是一个可用于取消任务的接口Revocable。
TaskDispatcher globalTaskDispatcher =
getGlobalTaskDispatcher(TaskPriority.DEFAULT);
Revocable revocable = globalTaskDispatcher.asyncDispatch(new Runnable() {
@Override
public void run() {
HiLog.info(LABEL_LOG, "async task1 run");
}});
HiLog.info(LABEL_LOG, "after async task1");
Revocable revocable2 = globalTaskDispatcher.asyncDispatch(new Runnable() {
@Override
public void run() {
HiLog.info(LABEL_LOG, "async task2 run");
}});
HiLog.info(LABEL_LOG, "after async task2");
常用的网络数据访问方法
,包括调用httpRequest对象
来进行网页访问,调用requst对象
来进行数据上传和下载,调用webSocket对象
进行网络通信。多线程概念
,分类
和使用方法
HiLog.info(LABEL_LOG, “after async task2”);
[外链图片转存中...(img-reaqLVR3-1643194987978)]
# 本章总结
* 介绍了HarmonyOS系统中几种`常用的网络数据访问方法`,包括`调用httpRequest对象`来进行网页访问,`调用requst对象`来进行数据上传和下载,`调用webSocket对象`进行网络通信。
* 由于网络访问受限于网络质量而较耗时,因此一般把网络访问放在单独的线程中执行,因此接着介绍了HarmonyOS系统中的`多线程概念`,`分类`和`使用方法`
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。