Android中AsyncTask的使用与源码分析,2021年移动开发者未来的出路在哪里
3.“后台计算结果的类型” 、
注: 在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用java.lang.Void类型代替。
一个异步任务的执行一般包括以下几个步骤:
1. execute(Params… params),执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。
2. onPreExecute(),在execute(Params… params)被调用后立即执行,一般用来在执行后台任务前对UI做一些标记。
3. doInBackground(Params… params),在onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress… values)来更新进度信息。
4. onProgressUpdate(Progress… values),在调用publishProgress(Progress… values)时,此方法被执行,直接将进度信息更新到UI组件上。
5. onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。
在使用的时候,有几点需要格外注意:
1. 异步任务的实例必须在UI线程中创建。
2. execute(Params… params)方法必须在UI线程中调用。
3. 不能在doInBackground(Params… params)中更改UI组件的信息。
4. 一个任务实例只能执行一次,如果执行第二次将会抛出异常。
一 、 AsyncTask的使用示例
==================
接下来,我们来看看如何使用AsyncTask执行异步任务操作,我们先建立一个项目,结构如下:
结构相对简单一些,让我们先看看MainActivity.java的代码:
package com.scott.async;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final String TAG = “ASYNC_TASK”;
private Button execute;
private Button cancel;
private ProgressBar progressBar;
private TextView textView;
private MyTask mTask;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
execute = (Button) findViewById(R.id.execute);
execute.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 注意每次需new一个实例,新建的任务只能执行一次,否则会出现异常
mTask = new MyTask();
mTask.execute(“http://www.baidu.com”);
execute.setEnabled(false);
cancel.setEnabled(true);
}
});
cancel = (Button) findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//取消一个正在执行的任务,onCancelled方法将会被调用,实际上是调用了FutureTask的取消操作,关于FutureTask下文会有介绍
mTask.cancel(true);
}
});
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
textView = (TextView) findViewById(R.id.text_view);
}
private class MyTask extends AsyncTask<String, Integer, String> {
//onPreExecute方法用于在执行后台任务前做一些UI操作
@Override
protected void onPreExecute() {
Log.i(TAG, “onPreExecute() called”);
textView.setText(“loading…”);
}
// doInBackground方法内部执行后台任务,不可在此方法内修改UI,运行在后台线程。
@Override
protected String doInBackground(String… params) {
Log.i(TAG, “doInBackground(Params… params) called”);
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(params[0]);
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
long total = entity.getContentLength();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int count = 0;
int length = -1;
while ((length = is.read(buf)) != -1) {
baos.write(buf, 0, length);
count += length;
//调用publishProgress公布进度,最后onProgressUpdate方法将被执行
publishProgress((int) ((count / (float) total) * 100));
//为了演示进度,休眠500毫秒
Thread.sleep(500);
}
return new String(baos.toByteArray(), “gb2312”);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return null;
}
// onProgressUpdate方法用于更新进度信息
@Override
protected void onProgressUpdate(Integer… progresses) {
Log.i(TAG, “onProgressUpdate(Progress… progresses) called”);
progressBar.setProgress(progresses[0]);
textView.setText(“loading…” + progresses[0] + “%”);
}
// onPostExecute方法用于在执行完后台任务后更新UI,显示结果。 运行在UI线程
@Override
protected void onPostExecute(String result) {
Log.i(TAG, “onPostExecute(Result result) called”);
textView.setText(result);
execute.setEnabled(true);
cancel.setEnabled(false);
}
//onCancelled方法用于在取消执行中的任务时更改UI
@Override
protected void onCancelled() {
Log.i(TAG, “onCancelled() called”);
textView.setText(“cancelled”);
progressBar.setProgre
ss(0);
execute.setEnabled(true);
cancel.setEnabled(false);
}
}
}
布局文件main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:orientation=“vertical”
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”>
<Button
android:id="@+id/execute"
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:text=“execute”/>
<Button
android:id="@+id/cancel"
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:enabled=“false”
android:text=“cancel”/>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:progress=“0”
android:max=“100”
style="?android:attr/progressBarStyleHorizontal"/>
<ScrollView
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”>
<TextView
android:id="@+id/text_view"
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”/>
因为需要访问网络,所以我们还需要在AndroidManifest.xml中加入访问网络的权限:
二、 AsyncTask的实现基本原理
===================
上面介绍了AsyncTask的基本应用,有些朋友也许会有疑惑,AsyncTask内部是怎么执行的呢,它执行的过程跟我们使用Handler又有什么区别呢?答案是:AsyncTask是对Thread+Handler良好的封装,在android.os.AsyncTask代码里仍然可以看到Thread和Handler的踪迹。下面就向大家详细介绍一下AsyncTask的执行原理。
源代码如下 :
/**
-
Override this method to perform a computation on a background thread. The
-
specified parameters are the parameters passed to {@link #execute}
-
by the caller of this task.
-
This method can call {@link #publishProgress} to publish updates
-
on the UI thread.
-
@param params The parameters of the task.
-
@return A result, defined by the subclass of this task.
-
这是一个abstract 方法,因此必须覆写。
-
@see #onPreExecute()
-
@see #onPostExecute
-
@see #publishProgress
*/
protected abstract Result doInBackground(Params… params);
/**
-
Runs on the UI thread before {@link #doInBackground}.
-
@see #onPostExecute
-
@see #doInBackground
*/
protected void onPreExecute() {
}
/**
-
Runs on the UI thread after {@link #doInBackground}. The
-
specified result is the value returned by {@link #doInBackground}
-
or null if the task was cancelled or an exception occured.
*后台操作执行完后会调用的方法,在此更新UI。
-
@param result The result of the operation computed by {@link #doInBackground}.
-
@see #onPreExecute
-
@see #doInBackground
*/
@SuppressWarnings({“UnusedDeclaration”})
protected void onPostExecute(Result result) {
}
/**
-
Runs on the UI thread after {@link #publishProgress} is invoked.
-
The specified values are the values passed to {@link #publishProgress}.
-
@param values The values indicating progress.
-
传值更新进度条
-
@see #publishProgress
-
@see #doInBackground
*/
@SuppressWarnings({“UnusedDeclaration”})
protected void onProgressUpdate(Progress… values) {
}
/**
-
Executes the task with the specified parameters. The task returns
-
itself (this) so that the caller can keep a reference to it.
-
This method must be invoked on the UI thread. 注意execute方法必须在UI线程中调用
-
@param params The parameters of the task.
-
@return This instance of AsyncTask.
-
@throws IllegalStateException If {@link #getStatus()} returns either
-
{@link AsyncTask.Status#RUNNING} or {@link AsyncTask.Status#FINISHED}.
*/
public final AsyncTask<Params, Progress, Result> execute(Params… params) {
if (mStatus != Status.PENDING) {
// 状态检测,只有在PENDING状态下才能正常运行,构造抛出异常
switch (mStatus) {
case RUNNING:
throw new IllegalStateException(“Cannot execute task:”
- " the task is already running.");
case FINISHED:
throw new IllegalStateException(“Cannot execute task:”
-
" the task has already been executed "
-
“(a task can be executed only once)”);
}
}
mStatus = Status.RUNNING;
// 正在执行任务前的准备处理
onPreExecute();
// 获得从UI现存传递来的参数
mWorker.mParams = params;
// 交给线程池管理器进行调度,参数为FutureTask类型,构造mFuture时mWorker被传递了进去,后边会继续分析
sExecutor.execute(mFuture);
// 返回自身,使得调用者可以保持一个引用
return this;
}
/**
-
This method can be invoked from {@link #doInBackground} to
-
publish updates on the UI thread while the background computation is
-
still running. Each call to this method will trigger the execution of
-
{@link #onProgressUpdate} on the UI thread.
-
@param values The progress values to update the UI with.
-
@see #onProgressUpdate
-
@see #doInBackground
*/
protected final void publishProgress(Progress… values) {
sHandler.obtainMessage(MESSAGE_POST_PROGRESS,
new AsyncTaskResult(this, values)).sendToTarget();
}
我们可以看到关键几个步骤的方法都在其中。
1、 doInBackground(Params… params) 是一个抽象方法,我们继承AsyncTask时必须覆写此方法;
2、 onPreExecute()、onProgressUpdate(Progress… values)、onPostExecute(Result result)、onCancelled() 这几个方法体都是空的,我们需要的时候可以选择性的覆写它们;
3、 publishProgress(Progress… values) 是final修饰的,不能覆写,只能去调用,我们一般会在doInBackground(Params… params)中调用此方法来更新进度条;
**4、**另外,我们可以看到有一个Status的枚举类和getStatus()方法,Status枚举类代码段如下:
//初始状态
private volatile Status mStatus = Status.PENDING;
public enum Status {
/**
- Indicates that the task has not been executed yet.
*/
PENDING,
/**
- Indicates that the task is running.
*/
RUNNING,
/**
- Indicates that {@link AsyncTask#onPostExecute} has finished.
*/
FINISHED,
}
/**
-
Returns the current status of this task.
-
@return The current status.
*/
public final Status getStatus() {
return mStatus;
}
可以看到,AsyncTask的初始状态为 PENDING ,代表待定状态, RUNNING 代表执行状态, FINISHED 代表结束状态,这几种状态在AsyncTask一次生命周期内的很多地方被使用,非常重要。
在execute函数中涉及到三个陌生的变量:mWorker、sExecutor、mFuture,我们也会看一下:
关于sExecutor,它是java.util.concurrent.ThreadPoolExecutor的实例,用于管理线程的执行。代码如下:
private static final int CORE_POOL_SIZE = 5;
private static final int MAXIMUM_POOL_SIZE = 128;
private static final int KEEP_ALIVE = 10;
//新建一个队列用来存放线程
private static final BlockingQueue sWorkQueue =
new LinkedBlockingQueue(10);
//新建一个线程工厂
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
//新建一个线程
public Thread newThread(Runnable r) {
return new Thread(r, “AsyncTask #” + mCount.getAndIncrement());
}
};
//新建一个线程池执行器,用于管理线程的执行
private static final ThreadPoolExecutor sExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE,
MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, sWorkQueue, sThreadFactory);
mWorker实际上是AsyncTask的一个的抽象内部类的实现对象实例,它实现了Callable接口中的call()方法,代码如下:
[java] view plaincopy
private static abstract class WorkerRunnable<Params, Result> implements Callable {
Params[] mParams;
}
而mFuture实际上是 java.util.concurrent.FutureTask 的实例,下面是它的FutureTask类的相关信息:
/**
-
A cancellable asynchronous computation.
-
…
*/
public class FutureTask implements RunnableFuture {
public interface RunnableFuture extends Runnable, Future {
/**
-
Sets this Future to the result of its computation
-
unless it has been cancelled.
*/
void run();
}
可以看到FutureTask是一个可以中途取消的用于异步计算的类。
下面是mWorker和mFuture实例在AsyncTask中的体现:
private final WorkerRunnable<Params, Result> mWorker;
private final FutureTask mFuture;
public AsyncTask() {
mWorker = new WorkerRunnable<Params, Result>() {
//call方法被调用后,将设置优先级为后台级别, 然后调用AsyncTask的doInBackground方法
public Result call() throws Exception {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
return doInBackground(mParams);
}
};
// 在mFuture实例中,将会调用mWorker做后台任务,完成后会调用done方法。
// 这里将mWorker作为参数传递给了mFuture对象
mFuture = new FutureTask(mWorker) {
@Override
protected void done() {
Message message;
Result result = null;
try {
result = get();
} catch (InterruptedException e) {
android.util.Log.w(LOG_TAG, e);
} catch (ExecutionException e) {
throw new RuntimeException(“An error occured while executing doInBackground()”,
e.getCause());
} catch (CancellationException e) {
//发送取消任务的消息
message = sHandler.obtainMessage(MESSAGE_POST_CANCEL,
new AsyncTaskResult(AsyncTask.this, (Result[]) null));
message.sendToTarget();
return;
} catch (Throwable t) {
throw new RuntimeException("An error occured while executing "
- “doInBackground()”, t);
}
ocess.THREAD_PRIORITY_BACKGROUND);
return doInBackground(mParams);
}
};
// 在mFuture实例中,将会调用mWorker做后台任务,完成后会调用done方法。
// 这里将mWorker作为参数传递给了mFuture对象
mFuture = new FutureTask(mWorker) {
@Override
protected void done() {
Message message;
Result result = null;
try {
result = get();
} catch (InterruptedException e) {
android.util.Log.w(LOG_TAG, e);
} catch (ExecutionException e) {
throw new RuntimeException(“An error occured while executing doInBackground()”,
e.getCause());
} catch (CancellationException e) {
//发送取消任务的消息
message = sHandler.obtainMessage(MESSAGE_POST_CANCEL,
new AsyncTaskResult(AsyncTask.this, (Result[]) null));
message.sendToTarget();
return;
} catch (Throwable t) {
throw new RuntimeException("An error occured while executing "
- “doInBackground()”, t);
}
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Python 中的 “jieba库”
目录 壹:介绍 贰:安装 叁:准备 肆:代码 伍:最后 壹:介绍 Python第三方库 "jieba库" 的功能是对中文进行分词;"jieba库" 就像一把美工刀,而中文文本为一张精…...
2024/4/7 15:20:38 - Android-日常开发总结的技术经验,这些知识你必须拿下
8.信息同步:不管是数据库还是网网络操作,新插入的数据注意返回ID(如果没有赋予唯一ID),否则相当于没有同步。 9.多线程操作数据库时,db关闭了会报错,也很可能出现互锁的问题,推荐使…...
2024/4/19 14:41:09 - Springboot源码分析第三弹 - 自动装配扩展,手动实现一个starter
Springboot源码分析第三弹 - 自动装配扩展,手动实现一个starter 原理回顾 经过前面的两篇文章,应该是能清楚的指定自动装配和自动配置是怎么实现的了。 今天再来回顾一下,然后我们自己实现一下 //AutoConfigurationImportSelector类 //通过…...
2024/5/5 5:29:18 - Mask-R-CNN 学习笔记 | 深度学习
Mask R-CNN for Object Detection and Segmentation 基于深度神经网络Mask R-CNN,使用TensorFlow实现。 感谢何凯明等人完成的惊人成就,论文传送门:Mask R-CNN 我的github地址 Demo balloon分割矿物显微图像的实例分割基于CT扫描的土石混…...
2024/5/5 5:06:41 - windows下 Qt+CMake配置OpenCV,VideoCapture无法读取视频,报错“Error: Assertion failed (size.width>。。。。。”
配置过程网上有很多,这篇很详细: https://blog.csdn.net/weixin_43763292/article/details/112975207 在我CMake过程中下面提示框出现了一些红色警告字体,当时也没在意,但当使用VideoCapture调用视频时却不好使,报错&a…...
2024/4/25 8:08:28 - 2022虎年新UI春节送祝福微信小程序源码下载支持多种流量主
介绍: 这是一款网友用以前发过的一款端午送祝福改的一款小程序 里面的背景图包括祝福语都已经修改成与虎年相关的内容了 总体来说找的背景图还是可以的,不过有些地方和细节小编也给完善了一下 然后小编测试的时候发现还没有流量主,所以小编也给加了几个流量主进去 …...
2024/4/19 9:34:36 - 如何在 Kali Linux 桌面上安装 KDE Plasma GUI
前言 Kali Linux 是一个基于 Debian 的开源安全 Linux 发行版,附带各种工具来执行黑客攻击和渗透测试。尽管开发人员已经使 XFCE 界面变得非常简单易用,但如果有人对此不满意,那么他或她可以使用其他可用选项(例如 KDE、GNOME、C…...
2024/5/5 9:27:14 - cocoscreator 解决局域网其他电脑无法预览的问题
出现这种问题一般都是电脑里面的防火墙造成的,设置下出入站规则就可以了,步骤看图操作,下面是个人的window10操作 1: 2: 3: 4:cocoscreator全部改成绿色...
2024/4/18 3:40:38 - 高端机市场卡位战:iQOO能否博得一席之地?
文|智能相对论 作者| 叶小安 短短三年时间从无名小辈到国内手机厂商前列,iQOO刷新了消费者对手机如何更好打电竞的认知,现如今其又试图在高端市场内再上演一次“突围战”。 前不久iQOO 9系列旗舰产品的推出,吹响了iQOO冲刺高端的号角。但在…...
2024/5/5 6:22:33 - 利用仪器对大脑进行的观测对AI的出现和发展作出巨大的贡献
利用仪器对大脑进行的观测对AI的出现和发展作出了巨大的贡献。现代神经生物学的发展是从亚细胞到组织水平的微观结构的信息获取开始的,这一过程受益于显微镜的发明以及细胞和组织中物质的偏色。著名的神经解剖学家Santiago Ramn y Cajal是第一个使用Golgi 染色法去观…...
2024/4/7 15:20:29 - Android-View--总结,总有几个你用得到,2021金九银十Android大厂面试题来袭
b).子 view 宽或高设置为 match_parent,那么子 view 的 size 就是占满父容器剩 余空间,不能超过父容器大小,模式就是 AT_MOST c).子 view 宽或高设置为 wrap_content,那么子 view 的 size 就是占满父容器剩余空间,不能超过父容器大小,模式就是…...
2024/4/14 17:59:30 - Golang 多种配置文件解析
Golang 配置文件相关操作 本文以读取数据库配置文件为例 1、JSON 文件 package main/*解析 json 格式的配置文件文件内容如下:{"type": "json","postgres": {"host": "localhost","port": 5432,&quo…...
2024/4/14 10:35:32 - 天玑900处理器相当于骁龙多少
天玑900处理器相当于骁龙780g。 1.从制作工艺方面分析,天玑900采用的是a78cpu架构,在6纳米技术上,天玑900也是相对成熟的产品;骁龙780采用的是三星5纳米的技术,二者都是包括了一个2.4赫兹的主频和三个2.2赫兹的主频&am…...
2024/5/5 8:21:33 - 使用 Javascript 和 OpenCV 进行人脸检测
大家好,我们将研究如何使用常规 Javascript、HTML Canvas 和 OpenCV 库从图像中检测人脸。 让我们先看一些例子,然后我们将继续编写代码并解释 如果您需要查看完整的代码库刚刚获得我的 github 存储库 GitHub - rajeshpachaikani/face-detection-opencv-…...
2024/4/18 7:23:59 - 基于Files.walkFileTree来删除文件夹
nio中新提供了Files类可以很方便的操作文件,可以使用walkFileTree来实现之前需要递归才能进行的一些操作,例如文件夹的删除,文件夹的遍历。其中walkFileTree方法通过访问者模式可以很方便的让我们可以对文件进行一个操作。 public class Test…...
2024/4/17 6:20:16 - 动手学深度学习V2.0(Pytorch)——26. 网络中的网络 NiN
文章目录 P1 课件讲解1.1 全连接层的问题1.2 NiN块结构(1X1卷积)1.3 NiN架构(全局池化)1.4 总结P2 代码P3 Q&A1. 显存4G跑不动VGG2. GAP这个设计能起到什么关键作用吗?3. 解释一下为什么NiN块是包含两个1x1的卷积,为什么不是1个或者3个4. 再解释一下1x1卷积的作用5. …...
2024/4/14 10:35:42 - Java数据类型扩展
整数 二进制0b 八进制0 十六进制0x 浮点数float double 定义float时: float f 0.1f; 避免使用浮点数进行比较 字符 用 单引号 定义 只能是一个字或字母 char c1 何; 编码 Unicode char c2 \u0061; //a 转义字符 \b 退格 \t 水平制表…...
2024/4/14 10:35:37 - JAVA的数据库编程-JDBC
配置好数据库连接后,接下来就需要在Java中来实现对数据库的操作了。 目录 一.JDBC编程的步骤 二.JDBC常用接口和类 1.数据库连接的2种方式 (1)通过DriverManager(驱动管理类)的静态方法获取 (2&#x…...
2024/4/24 14:41:56 - Hyper-V centOS 虚拟机扩容(GPT)
1 虚拟磁盘扩容 第一步没有什么可说的,这是必须的。 在 Hyper-V 管理器里选中虚拟机,然后点击设置,找到磁盘,点编辑,然后指定一个新大小。 问题在这之后 2 扩充 centOS 中识别的容量 扩充后的容量在 centOS 里没有…...
2024/4/14 10:35:27 - java线程理解
线程是计算机的执行流,java支持多线程并发(理解:多个任务执行,这样计算机在单位时间内处理能力更强),单进程并行 线程: 当一个程序在运行时就属于一个进程 进程 : 包括运行中的程序和程序所使用到的内容和系统资源(补充: 进程就是一个应用程序的可执行单位,进程有自己独立的工…...
2024/4/19 10:14:48
最新文章
- VSCode 配置 Qt 开发环境
文章目录 1. 环境说明2. 配置系统环境变量 1. 环境说明 操作系统:Windows 11VSCode版本:1.88.1CMake版本:3.27.7Qt6版本:6.7.0(MinGW 11.2.0 64-bit) 2. 配置系统环境变量 自行根据自己的Qt安装路径配置 配置 MinGW 和 CMake C…...
2024/5/5 13:30:37 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云
8核32G云服务器租用优惠价格表,云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价,腾讯云和京东云是轻量应用服务器,阿里云是云服务器ECS: 阿里云8核32G服务器 阿里云8核32G服务器价格…...
2024/5/5 8:42:13 - YOLOv9架构图分享
YOLOv9是YOLO (You Only Look Once)系列实时目标检测系统的最新迭代。它建立在以前的版本之上,结合了深度学习技术和架构设计的进步,以在目标检测任务中实现卓越的性能。通过将可编程梯度信息(PGI)概念与广义ELAN (GELAN)架构相结合,YOLOv9在…...
2024/5/4 11:01:35 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57