android:text=“获取用户信息”

app:layout_constraintBottom_toBottomOf=“parent”

app:layout_constraintLeft_toLeftOf=“parent”

app:layout_constraintRight_toRightOf=“parent”

app:layout_constraintTop_toTopOf=“parent” />

<TextView

android:id="@+id/txtUserName"

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:gravity=“center”

android:text="@{userInfo.age}"

app:layout_constraintTop_toBottomOf="@+id/btnGetUserInfo"

android:layout_marginTop=“30dp”

android:textSize=“30dp”

/>

<TextView

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:text=“text”

android:gravity=“center”

app:layout_constraintTop_toBottomOf="@+id/txtUserName"

/>

</androidx.constraintlayout.widget.ConstraintLayout>

Activity 中调用代码如下:

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

val activityBinding: ActivityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)

activityBinding.lifecycleOwner = this

activityBinding.userInfo = TestInfo(“lsm”,“lsj”)

}

TestInfo 的定义如下:

public class TestInfo extends BaseObservable { //继承 BaseObservable

private String age;

private String name;

public TestInfo(String age,String name){

this.name = name;

this.age = age;

}

public void setAge(String age) {

this.age = age;

notifyPropertyChanged(BR.age); //需要变更的变量的 set 方法中加上 notifyPropertyChanged

}

public void setName(String name) {

this.name = name;

notifyPropertyChanged(BR.name); //需要变更的变量的 set 方法中加上 notifyPropertyChanged

}

@Bindable //需要变更的变量还要加上 @Bindable 注解

public String getAge() {

return age;

}

@Bindable //需要变更的变量还要加上 @Bindable 注解

public String getName() {

return name;

}

}

TestInfo需要继承BaseObservable,同时对于需要监听变化的变量加上@Bindable 注解,同时该变量的set方法还要加上notifyPropertyChangedBR.xxx 是注解生成的。

数据的双向绑定

使用单向数据绑定时,您可以为特性设置值,并设置对该特性的变化作出反应的监听器:

<CheckBox

android:id="@+id/rememberMeCheckBox"

android:checked="@{viewmodel.rememberMe}"

android:onCheckedChanged="@{viewmodel.rememberMeChanged}"

/>

双向数据绑定为此过程提供了一种快捷方式:

<CheckBox

android:id="@+id/rememberMeCheckBox"

android:checked="@={viewmodel.rememberMe}"

/>

@={} 表示法(其中重要的是包含“=”符号)可接收属性的数据更改并同时监听用户更新。其他的设置和前面的单向数据绑定一致。

结合 LiveData 使用

内容参考自这里,我们上面在使用 DataBinding 时,TestInfo 还要继承 BaseObserble,使用注解、notifyPropertyChanged(),使用起来其实挺复杂,而且还有侵入性。LiveData 结合 DataBinding 的使用步骤如下:

  1. 使用 LiveData 对象作为数据绑定来源,需要设置 LifecycleOwner。

  2. xml 中定义变量 ViewModel,并使用 ViewModel。

  3. binding 设置变量 ViewModel。

//结合DataBinding使用的ViewModel

//1. 要使用LiveData对象作为数据绑定来源,需要设置LifecycleOwner

binding.setLifecycleOwner(this);

ViewModelProvider viewModelProvider = new ViewModelProvider(this);

mUserViewModel = viewModelProvider.get(UserViewModel.class);

//3. 设置变量ViewModel

binding.setVm(mUserViewModel);

xml 文件的定义如下:

<variable

name=“vm”

type=“com.hfy.demo01.module.jetpack.databinding.UserViewModel” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text="@{vm.userLiveData.name}"/>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text="@{vm.userLiveData.level}"/>

这样就ok了,你会发现 我们不需要在 Activity 中拿到 LivaData 去 observe(owner,observer)了,DataBinding 自动生成的代码,会帮我们去做这操作,所以需要设置LifecycleOwner。

使用自定义特性的双向数据绑定

例如,如果要在名为 MyView 的自定义视图中对 "time" 特性启用双向数据绑定,请完成以下步骤:

  1. 使用 @BindingAdapter,对用来设置初始值并在值更改时进行更新的方法进行注释:

@BindingAdapter(“time”)

@JvmStatic fun setTime(view: MyView, newValue: Time) {

// Important to break potential infinite loops.

if (view.time != newValue) {

view.time = newValue

}

}

  1. 使用 @InverseBindingAdapter 对从视图中读取值的方法进行注释:

@InverseBindingAdapter(“time”)

@JvmStatic fun getTime(view: MyView) : Time {

return view.getTime()

}

更多内容请参考这里。

源码分析

我们在路径app/build/intermediates/data_binding_layout_info_type_merge/debug/out/activity_main-layout.xml查看文件

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<Layout directory=“layout” filePath=“app/src/main/res/layout/activity_main.xml”

isBindingData=“true” isMerge=“false” layout=“activity_main”

modulePackage=“com.jackie.jetpackdemo” rootNodeType=“androidx.constraintlayout.widget.ConstraintLayout”>

<Target tag=“layout/activity_main_0”

view=“androidx.constraintlayout.widget.ConstraintLayout”>

false

可以看到<Targets>标签下面的就是我们布局,分成具体的子<Target>标签对应具体的 ConstraintLayout、TextView等,activity_main_0 对应我们的ConstraintLayout,再来路径app/build/intermediates/incremental/mergeDebugResources/stripped.dir/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

tools:context=".MainActivity" android:tag=“layout/activity_main_0” xmlns:android=“http://schemas.android.com/apk/res/android” xmlns:app=“http://schemas.android.com/apk/res-auto” xmlns:tools=“http://schemas.android.com/tools”>

<Button

android:id="@+id/btnGetUserInfo"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“获取用户信息”

app:layout_constraintBottom_toBottomOf=“parent”

app:layout_constraintLeft_toLeftOf=“parent”

app:layout_constraintRight_toRightOf=“parent”

app:layout_constraintTop_toTopOf=“parent” />

<TextView

android:id="@+id/txtUserName"

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:gravity=“center”

android:tag=“binding_1”

app:layout_constraintTop_toBottomOf="@+id/btnGetUserInfo"

android:layout_marginTop=“30dp”

android:textSize=“30dp”

/>

<TextView

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:text=“text”

android:gravity=“center”

app:layout_constraintTop_toBottomOf="@+id/txtUserName"

/>

</androidx.constraintlayout.widget.ConstraintLayout>

这个文件其实就是移除了<layout>、<data>标签的布局文件,里面的 tag 就是我们上面对应<Target>标签中的tagExpression attribute="android:text" text="userInfo.age" <Expression>中的具体属性对应具体的值。

初始化

再来从val activityBinding: ActivityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)来分析源码,

//DataBindingUtil.java

public static T setContentView(@NonNull Activity activity,

int layoutId, @Nullable DataBindingComponent bindingComponent) {

activity.setContentView(layoutId); //还是需要setContentView

View decorView = activity.getWindow().getDecorView();

ViewGroup contentView = (ViewGroup) decorView.findViewById(android.R.id.content);

return bindToAddedViews(bindingComponent, contentView, 0, layoutId);

}

我们设置的activity_xxx.xml其实是在android.R.id.content下面的,继续来看bindToAddedViews方法

//DataBindingUtil.java

private static T bindToAddedViews(DataBindingComponent component,

ViewGroup parent, int startChildren, int layoutId) {

final int endChildren = parent.getChildCount();

final int childrenAdded = endChildren - startChildren;

if (childrenAdded == 1) {

final View childView = parent.getChildAt(endChildren - 1);

return bind(component, childView, layoutId); //调用bind

} else {

final View[] children = new View[childrenAdded];

for (int i = 0; i < childrenAdded; i++) {

children[i] = parent.getChildAt(i + startChildren);

}

return bind(component, children, layoutId); //调用bind

}

}

}

最终会调到bind方法

//DataBindingUtil.java

static T bind(DataBindingComponent bindingComponent, View root,

int layoutId) {

return (T) sMapper.getDataBinder(bindingComponent, root, layoutId);

}

sMapperDataBinderMapper,其真正实现类是通过 APT 生成的DataBinderMapperImpl(app/build/generated/ap_generated_sources/debug/out/com/jackie/jetpackdemo/DataBinderMapperImpl.java)

public class DataBinderMapperImpl extends DataBinderMapper {

···

@Override

public ViewDataBinding getDataBinder(DataBindingComponent component, View view, int layoutId) {

int localizedLayoutId = INTERNAL_LAYOUT_ID_LOOKUP.get(layoutId);

if(localizedLayoutId > 0) {

final Object tag = view.getTag();

if(tag == null) {

throw new RuntimeException(“view must have a tag”);

}

switch(localizedLayoutId) {

case LAYOUT_ACTIVITYMAIN: {

if (“layout/activity_main_0”.equals(tag)) {

return new ActivityMainBindingImpl(component, view); //关键代码,new ActivityMainBindingImpl

}

···

接下来我们来分析ActivityMainBindingImpl(app/build/generated/ap_generated_sources/debug/out/com/jackie/jetpackdemo/databinding/ActivityMainBindingImpl.java)这个类,它也是 APT 生成的,

//ActivityMainBindingImpl.java

public ActivityMainBindingImpl(@Nullable androidx.databinding.DataBindingComponent bindingComponent, @NonNull View root) {

this(bindingComponent, root, mapBindings(bindingComponent, root, 3, sIncludes, sViewsWithIds));

}

private ActivityMainBindingImpl(androidx.databinding.DataBindingComponent bindingComponent, View root, Object[] bindings) {

super(bindingComponent, root, 1

, (android.widget.Button) bindings[2]

, (android.widget.TextView) bindings[1]

);

this.mboundView0 = (androidx.constraintlayout.widget.ConstraintLayout) bindings[0];

this.mboundView0.setTag(null);

this.txtUserName.setTag(null);

setRootTag(root);

// listeners

invalidateAll();

}

我们调用了第一个方法,里面的这个 3 代表着我们布局文件中有三个节点(ConstraintLayout,Button,TextView),但是我们前面的布局中明明还有一个TextView,为什么没有呢?因为我们这个TextView我们并没有设置它的 Id,所以没有生成,如果设置后重新 build 下 3 就会变成 4 了。

继续来看mapBindings方法:

protected static Object[] mapBindings(DataBindingComponent bindingComponent, View root,

int numBindings, IncludedLayouts includes, SparseIntArray viewsWithIds) {

Object[] bindings = new Object[numBindings];

mapBindings(bindingComponent, root, bindings, includes, viewsWithIds, true);

return bindings;

}

它首先是 new 一个大小为 3 的对象数组,然后把这三个标签解析完放到该数组中。上面的ActivityMainBindingImpl公有构造器会调用私有构造器,再回过头来看

val activityBinding: ActivityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)

执行完这个代码,activityBinding中已经有这 3 个对象了,所以可以进行这样的调用

activityBinding.txtUserName

activityBinding.btnGetUserInfo

到目前为止,初始化已经完成了。

调用流程

接下来我们从这个调用开始分析

activityBinding.userInfo = TestInfo(“lsm”,“lsj”)

这个activityBinding.userInfo调用的实际上是ActivityMainBinding中的setUserInfo方法

//ActivityMainBinding.java

public void setUserInfo(@Nullable com.jackie.jetpackdemo.data.TestInfo UserInfo) {

updateRegistration(0, UserInfo);

this.mUserInfo = UserInfo;

synchronized(this) {

mDirtyFlags |= 0x1L;

}

notifyPropertyChanged(BR.userInfo);

super.requestRebind();

}

这里的updateRegistration方法如下

//localFieldId 为 BR 文件中的Id,observable 就是观察者

protected boolean updateRegistration(int localFieldId, Observable observable) {

return updateRegistration(localFieldId, observable, CREATE_PROPERTY_LISTENER);

}

/**

  • Method object extracted out to attach a listener to a bound Observable object.

*/

private static final CreateWeakListener CREATE_PROPERTY_LISTENER = new CreateWeakListener() {

@Override

public WeakListener create(ViewDataBinding viewDataBinding, int localFieldId) {

return new WeakPropertyListener(viewDataBinding, localFieldId).getListener();

}

};

CREATE_PROPERTY_LISTENER名字也很直白,表示创建一个属性的监听器,也就是说属性发生变化的时候WeakPropertyListener监听器会被回调。

localFieldId 为 BR 文件中的 Id,BR 文件是什么呢?

d(BR.userInfo);

super.requestRebind();

}

这里的updateRegistration方法如下

//localFieldId 为 BR 文件中的Id,observable 就是观察者

protected boolean updateRegistration(int localFieldId, Observable observable) {

return updateRegistration(localFieldId, observable, CREATE_PROPERTY_LISTENER);

}

/**

  • Method object extracted out to attach a listener to a bound Observable object.

*/

private static final CreateWeakListener CREATE_PROPERTY_LISTENER = new CreateWeakListener() {

@Override

public WeakListener create(ViewDataBinding viewDataBinding, int localFieldId) {

return new WeakPropertyListener(viewDataBinding, localFieldId).getListener();

}

};

CREATE_PROPERTY_LISTENER名字也很直白,表示创建一个属性的监听器,也就是说属性发生变化的时候WeakPropertyListener监听器会被回调。

localFieldId 为 BR 文件中的 Id,BR 文件是什么呢?

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 浏览器缓存及实现原理

    缓存的种类 浏览器缓存 缓存存在的意义就是当用户点击back按钮或是再次去访问某个页面的时候能够更快的响应。尤其是在多页应用的网站中&#xff0c;如果你在多个页面使用了一张相同的图片&#xff0c;那么缓存这张图片就变得特别的有用。浏览器先向代理服务器发起Web请求&am…...

    2024/4/15 16:11:20
  2. 线程池优雅关闭

    先说结论&#xff0c;没有完美的线程池关闭方法&#xff0c;因为每个人的业务不同&#xff0c;下面先给出个示例&#xff0c;业务可以在这个基础上修改 下面来看下 guava 提供的线程池关闭方法&#xff0c;我再加些注释 // com.google.common.util.concurrent.MoreExecutors#s…...

    2024/4/14 13:30:13
  3. 面试项目经理,这12个问题一定会被问到(建议收藏)

    美国项目管理协会调查现实&#xff0c;如果一个项目没有运营好&#xff0c;那么每投资 10 亿美元&#xff0c;就会有1.22亿美元被浪费掉。 所以企业在招聘项目经理的时候&#xff0c;会格外慎重&#xff0c;对项目经理的综合能力要求也更高。下面&#xff0c;我们来看项目经理…...

    2024/4/19 19:40:12
  4. WebSocket协议原理

    1、WebSocket协议是什么 1.1 WebSocket是应用层协议 WebSocket是基于TCP的应用层协议&#xff0c;用于在C/S架构的应用中实现双向通信&#xff0c;关于WebSocket协议的详细规范和定义参见rfc6455。 需要特别注意的是&#xff1a;虽然WebSocket协议在建立连接时会使用HTTP协议…...

    2024/4/14 13:30:18
  5. 2021年焊工(初级)考试总结及焊工(初级)复审模拟考试

    题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;焊工&#xff08;初级&#xff09;考试总结是安全生产模拟考试一点通总题库中生成的一套焊工&#xff08;初级&#xff09;复审模拟考试&#xff0c;安全生产模拟考试一点通上焊工…...

    2024/4/14 13:30:18
  6. C语言|职工工资管理系统

    #include<stdio.h> #include<stdlib.h> #include<string.h> struct worker {char depa[30];char name[30];char ID[10];int salary1;int salary2;int salary3;int salary4; }; //职工信息 int dq(struct worker wo[]); void bc(struct worker wo[]); void …...

    2024/4/20 9:48:54
  7. 电池SOH仿真系列-基于LSTM神经网络的电池SOH估算方法

    基于LSTM神经网络的电池SOH估算循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;与BP神经网络不同&#xff0c;RNN网络不仅考虑前一时刻的输入&#xff0c;同时还赋予网络对前面时刻信息的记忆能力。尽管RNN网络具有较高的精度&#xff0c;但其存…...

    2024/4/22 15:26:53
  8. Spring Day(3)

    Spring AOP一、Spring AOP 基本概念1.1 AOP概念1.2 AOP术语二、动态代理2.1 JDK动态代理1. 创建一个web应用&#xff0c;并导入所需的jar包。2. 创建接口和实现类3. 创建切面类4. 在dynamic.jdk包下创建代理类JDKDynamicProxy。5. 创建测试类测试6. 测试运行结果2.2 CGLIB动态代…...

    2024/4/17 18:24:56
  9. 2021年危险化学品经营单位主要负责人考试及危险化学品经营单位主要负责人模拟考试

    题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;危险化学品经营单位主要负责人考试是安全生产模拟考试一点通生成的&#xff0c;危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主要负责人最新版教材汇编出…...

    2024/4/24 15:22:03
  10. ooday08 2022.01.19 面向对象第八天:

    面向对象第八天&#xff1a; 回顾&#xff1a; 接口&#xff1a; ​ 引用数据类型&#xff0c;interface定义&#xff0c;只能包含常量和抽象方法 ​ 不能被实例化&#xff0c;需要被实现&#xff0c;实现类&#xff1a;必须重写所有抽象方法 ​ 一个类可以实现多个接口&#…...

    2024/4/14 13:30:18
  11. 【Python入门教程】第27篇 函数之文档注释

    本篇我们介绍一下如何利用文档注释&#xff08;docstrings&#xff09;为函数增加帮助文档。 help() 函数 Python 提供了一个内置的函数 help()&#xff0c;用于显示函数的帮助文档。 以下示例输出了 print() 函数的帮助文档&#xff1a; help(print)输出结果如下&#xff…...

    2024/4/14 13:29:53
  12. .net NuGet 错误 NU1105

    NuGet 错误 NU1105 无法读取"ProjectFile"的项目信息。 项目文件可能无效或缺少还原所需的目标。 问题 项目文件存在&#xff0c;但没有为此文件提供还原信息。 解决方案 命令行 从命令行中&#xff0c;这可能表示文件已损坏或 NuGet.targets 未导入 。 若要导…...

    2024/4/14 13:30:03
  13. Java笔记-多维数组(二维数组入门)

    目录二维数组介绍二维数组的使用二维数组介绍 二维数组的使用 public class TwoDimensionalArray01 { //编写一个main方法public static void main(String[] args) {/*请用二维数组输出如下图形0 0 0 0 0 00 0 1 0 0 0 0 2 0 3 0 00 0 0 0 0 0*///什么是二维数组&#xff1a; /…...

    2024/4/14 13:29:48
  14. 暴力解决无效的目标发行版: 11

    看以下八个地方是否一致&#xff0c;如果一致那我也不知道了 如果是springboot项目还可以检查pom.xml文件...

    2024/4/15 0:31:56
  15. 用gets()函数输入字符串(解决此句子有几个单词问题)

    字符串的输入和输出方式可以用sanf()函数和gets&#xff08;&#xff09;函数 在用scanf()函数输入字符串时&#xff0c;因为数组名代表数组的起始位置&#xff0c;所以&#xff0c;地址项用字符数组名&#xff0c;格式字符使用s&#xff1b;在输入数据时&#xff0c;以空格或…...

    2024/4/14 13:29:53
  16. 使用辗转相除法求两个数的最大公约数

    #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() {int m, n, r;scanf("%d%d", &m, &n);while (m % n){r m % n;m n;n r;}printf("%d\n", n);return 0; }...

    2024/4/18 16:09:02
  17. 使用merge合并行

    【应用场景&#xff1a;】要实现比较两个表的某个列的数据的差异&#xff0c;然后根据比较结果的是否相同&#xff08;WHEN MATCHED表示匹配上&#xff09;进行相应的操作&#xff0c;采用Oracle系统的MERGE语句可以实现。 【语句实例】 MERGE INTO products p USING newprodu…...

    2024/4/18 18:11:07
  18. Word排版技巧:公式居中,编号居右

    方法 第一步&#xff1a;输入公式和序号&#xff1b;第二步&#xff1a;在公式和序号之间加入“#”符号&#xff1b;第三步&#xff1a;把鼠标光标放到公式的最后&#xff08;一定要在公式内&#xff09;&#xff1b;第四步&#xff1a;按下“enter”键。 效果...

    2024/4/14 13:30:08
  19. SpringCloud第10讲:网关SpringCloudGateway

    SpringCloud生态的网关&#xff08;第二代&#xff09;&#xff0c;未来会取代Zuul&#xff08;第一代&#xff09;&#xff0c;Gateway是基于Netty&#xff08;网络通信框架&#xff0c;可以实现高性能的服务端和客户端&#xff09;、Reactor以及WebFlux&#xff08;基于React…...

    2024/4/14 13:29:58
  20. Web应用开发中的本地存储限额localStroage Quota

    近几年互联网络的发展似乎进入一个瓶颈期。不独一时一地&#xff0c;全球趋势大致如此&#xff0c;大概处于传统互联网络已经日至成熟&#xff0c;而创新技术在萌芽期尚未获得突破之际。所以传统互联网络技术只好在细节上打磨、内卷&#xff08;involution&#xff09;和进化&a…...

    2024/4/20 14:20:45

最新文章

  1. react经验12:等待状态更新

    应用场景: 等待react组件内的state发生变更后进行后续操作。 已知问题 通常state的变化会引起dom的刷新&#xff0c;更新state一般使用setState&#xff0c;但这是个异步操作。 如果此时需要立即操作dom&#xff0c;得到的目标dom是刷新之前的样子。 应对方法 方法1:使用u…...

    2024/4/27 2:23:02
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Gitlab全量迁移

    Gitlab全量迁移 一、背景1.前提条件 一、背景 公司研发使用的Gitlab由于服务器下架需要迁移到新的Gitlab服务器上。Gitlab官方推荐了先备份然后再恢复的方法。个人采用官方的另外一种方法&#xff0c;就写这篇文章给需要的小伙伴参考。 源Gitlab: http://old.mygitlab.com #地…...

    2024/4/16 2:05:42
  4. 《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?

    问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null&#xff0c;那么typeof nullValue "?" const u …...

    2024/4/25 5:18:48
  5. OpenCV单通道图像按像素成倍比例放大(无高斯平滑处理)

    OpenCV中的resize函数可以对图像做任意比例的放大(/缩小)处理&#xff0c;该处理过程会对图像做高斯模糊化以保证图像在进行放大&#xff08;/缩小&#xff09;后尽可能保留源图像所展现的具体内容&#xff08;消除固定频率插值/采样带来的香农采样信息损失&#xff09;&#x…...

    2024/4/25 15:27:30
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/25 18:39:23
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在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