Android Binder机制实现进程间数据交换(不使用aidl实现)
在Android中,Binder用于完成进程间通信(IPC),即把多个进程关联在一起。
比如,普通应用程序可以调用音乐播放服务提供的播放、暂停、停止等功能。 Binder
工作在Linux层面,属于一个驱动,只是这个驱动不需要硬件,或者说其操作的硬件是
基于一小段内存。从线程的角度来讲,Binder驱动代码运行在内核态,客户端程序调
用Binder是通过系统调用完成的。Binder是一种架构,这种架构提供了服务端接口、
Binder驱动、客户端接口三个模块。Binder实际上是一种是C/S通信模式。C/S通信过
程的重要函数:
a)在服务端,创建需要创建Binder类或者其衍生子类,其中需要重写Binder的
onTransact(int code, Parceldata, Parcel reply, int flags)方法,完成对客户端请求的监听;
其中,code是服务端和客户端约定的一种信息约定;
b)在客户端,首先要获得服务端的Binder对象的引用(至于具体怎么获取,后面会
详细说明,这里知道这个概念即可),在或得Binder对象的引用之后,可以调用binder.
transact(int code,Parceldata,Parcel reply,int flags) 方法,此方法被调用之后,参数code
会传递给服务段的onTransact()参数,然后onTransact()会根据code的不同执行相应的业务
代码;
1.服务端接口:
一个Binder服务端实际上就是一个Binder类的对象,该对象一旦创建,内部就启动一个
隐藏线程。该线程接下来会接收Binder驱动发送的消息,收到消息后,会执行到Binder对象
中的 onTransact() 函数,并按照该函数的参数执行不同的服务代码。因此,要实现一个Binder
服务,就必须重载onTransact()方法。重载onTransact()函数的主要内容是把onTransact()函
数的参数转换为服务函数的参数,而onTransact()函数的参数来源是客户端调用transact()函数
时输入的,因此,如果transact()有固定格式的输入,那么onTransact()就会有固定格式的输出。
@Overrideprotected boolean onTransact(int code, Parcel data, Parcel reply, int flags)throws RemoteException {// TODO Auto-generated method stubLog.i("--MyFirstBinder--", "onTransact");// data.enforceInterface("MyFirstBinder");String music = data.readString();Log.i("--MyFirstBinder(test)--", music);reply.writeString(music);reply.writeInt(data.readInt());switch (code) {case 1:try {Log.i("--MyFirstBinder--", "1");prepareAndPlay(music);} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NameNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}break;case 2:Log.i("--MyFirstBinder--", "2");Log.i("--isplaying--", ""+player.isPlaying());if(player.isPlaying())player.pause();elseplayer.start();break;default:break;}return true;}
2.Binder驱动 :任意一个服务端Binder对象被创建时,同时会在Binder驱动中创建一个
mRemote对象,该对象的类型也是Binder类。客户端要访问远程服务时,都是通过
mRemote对象。
3.客户端 :客户端要想访问远程服务,必须获取远程服务在Binder对象中对应的mRemote
引用,至于如何获取,下面将会介绍。获得该mRemote对象后,就可以调用其transact()
方法,而在Binder驱动中,mRemote对象也重载了transact()方法,重载的内容主要包括以
下几项。
- 以线程间消息通信的模式,向服务端发送客户端传递过来的参数。
- 挂起当前线程,当前线程正是客户端线程,并等待服务端线程执行完指定服务函数后通知(notify)。
- 接收到服务端线程的通知,然后继续执行客户端线程,并返回到客户端代码区。
客户端关键代码:
Parcel data = Parcel.obtain();
// data.writeInterfaceToken("MyFirstBinder");
data.writeString("zhang.mp3");
data.writeInt(0);// 仅仅为了测试Parcel
Parcel reply = Parcel.obtain();
if (v.equals(start)) {try {binder.transact(1, data, reply, 0);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else if (v.equals(stop)) {try {binder.transact(2, data, reply, 0);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}
}
String musicName = reply.readString();
二、应用:利用Binder机制实现一个简单的播放音乐的功能
1.废话不多说,直接贴上代码
(1)服务端代码:(注意:需要在工程目录下新建文件夹music,然后放入zhang.mp3文件,当然
可以改路径和名称啦)
文件一:MyFirstBinder.java文件
package com.example.binerservier;import java.io.FileInputStream;
import java.io.IOException;import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Environment;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;public class MyFirstBinder extends Binder {MediaPlayer player;public MyFirstBinder() {player = new MediaPlayer();}@Overrideprotected boolean onTransact(int code, Parcel data, Parcel reply, int flags)throws RemoteException {// TODO Auto-generated method stubLog.i("--MyFirstBinder--", "onTransact");// data.enforceInterface("MyFirstBinder");String music = data.readString();Log.i("--MyFirstBinder(test)--", music);reply.writeString(music);reply.writeInt(data.readInt());switch (code) {case 1:try {Log.i("--MyFirstBinder--", "1");prepareAndPlay(music);} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NameNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}break;case 2:Log.i("--MyFirstBinder--", "2");Log.i("--isplaying--", ""+player.isPlaying());if(player.isPlaying())player.pause();elseplayer.start();break;default:break;}return true;}private void prepareAndPlay(String music) throws IllegalArgumentException,IllegalStateException, IOException, NameNotFoundException {
// String pkgName="com.example.binerservier";
// Context context = mContext.createPackageContext(pkgName,
// Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);String filePath="mnt/sdcard/zhang.mp3";FileInputStream fis = new FileInputStream(filePath);player.reset();player.setDataSource(fis.getFD());player.prepare();player.start();}
}
文件二:MyService.java
package com.example.binerservier;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;public class MyService extends Service{private MyFirstBinder mBinder;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubmBinder=new MyFirstBinder();Log.i("--MyFirstBinder--", "onBind");return mBinder;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.i("-MyFirstBinder-","OnCreate");}}
2、客户端代码MainActivity.java
package com.example.binderclient;import java.io.File;
import java.lang.reflect.Method;import dalvik.system.DexClassLoader;import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;public class MainActivity extends Activity {Button start;Button stop;EditText text;IBinder binder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);start = (Button) findViewById(R.id.start);stop = (Button) findViewById(R.id.stop);text = (EditText) findViewById(R.id.text);ClickListener listener = new ClickListener();start.setOnClickListener(listener);stop.setOnClickListener(listener);Intent intent = new Intent();intent.setAction("com.example.binerservier.MY_SERVICE");try {binder = getIBinder(intent);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}class ClickListener implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubParcel data = Parcel.obtain();// data.writeInterfaceToken("MyFirstBinder");data.writeString("zhang.mp3");data.writeInt(0);// 仅仅为了测试ParcelParcel reply = Parcel.obtain();if (v.equals(start)) {try {binder.transact(1, data, reply, 0);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else if (v.equals(stop)) {try {binder.transact(2, data, reply, 0);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}String musicName = reply.readString();int test = reply.readInt();// ----used only for testing-------text.setText(musicName + test);}}private IBinder getIBinder(Intent intent) throws Exception {// ****//String pkgName = "com.example.binerservier";Context context = createPackageContext(pkgName,Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);// DexClassLoader loader = new DexClassLoader(dexPath,// optimizedDirectory,// null, ClassLoader.getSystemClassLoader());Class smcls = context.getClassLoader().loadClass("com.example.binerservier.MyService");Log.i("--MyService--", smcls.getName());Method mth = smcls.getMethod("onBind", Intent.class);<pre name="code" class="java">interface ICat
{String getColor();double getWeight();
}
Log.i("--Method--", mth.getName());
Method mOncreate = smcls.getMethod("onCreate", null);
Object service = smcls.newInstance();
mOncreate.invoke(service, null);
return (IBinder) mth.invoke(service, intent);}}
3、关于代码的说明和解释
(1)注意服务端和客户端是两个应用程序,这也是体现了为什么利用Binder实现的
是进程间通信(IPC),当然也可以在一个应用程序中间。
(2)程序的整体功能:界面下的“code1播放”按钮实现播放音乐,“code2暂停”按钮
实现暂停;上面的EditText显示歌曲名称;
(3)工作流程:首先,在服务端的Service里面需要实现一个Binder类(实际是继承他
的子类),这个类中重写ontransact()方法,其中会根据和客户端约定好的code执行相应
的业务逻辑;在服务端完成之后,客户端要和服务端进行通信,需要获得服务端的Binder
引用,关于Binder引用的获得,我采用的java的反射机制,好像有其他好的方法,http://www.tuicool.com/articles/FRNFFj中有所提及,不过我没有实现它;利用Java的反射
机制获得Binder引用的代码就是那个getIbinder()函数,具体来说,只要调用服务端Service
的onBind()方法就可以获得Binder引用;(千万注意不要多次获得Binder引用,因为这样在
每次获取时的Service都是新的实例,或得到意外的结果),括号里面忽略之;
三、关于Android AIDL文件的一点理解
其实,Android在IPC通信的时候远没有上面的那么复杂,Android为程序设计者提供了
AIDL功能,程序设计者只要写一个aidl接口文件,Android aidl解释器会自动为其生成相应的
Java接口文件,具体在gen目录下;下面是个人对于Android adil文件的实现的一点理解:
(本人小白,不对请包涵)假设在写了一个Icat.aidl文件,那么gen目录下会自动产生Icat.java
接口文件,假设Icat.aidl文件内容是:
interface ICat
{String getColor();double getWeight();
}
那么在Icat.java文件中会有String getColor()和double getWeight()两个函数,并且
在Icat.java中的onTransact()函数中会一次对aidl文件中的函数进行编code调用,即在从第一
个函数的code是1,第二个是2,以此类推。那么在客户端调用transact()函数的时候,如果参
数code是1,则会调用aidl文件的第一个函数,code是2,则调用调用aidl文件的第二个函数,
以此类推。在gen下的Icat.java代码可以论证上面的内容。
switch (code)
{
case INTERFACE_TRANSACTION:
{
reply.writeString(DESCRIPTOR);
return true;
}
case TRANSACTION_getColor:
{
data.enforceInterface(DESCRIPTOR);
java.lang.String _result = this.getColor();
reply.writeNoException();
reply.writeString(_result);
return true;
}
case TRANSACTION_getWeight:
{
data.enforceInterface(DESCRIPTOR);
double _result = this.getWeight();
reply.writeNoException();
reply.writeDouble(_result);
return true;
}
上面的TRANSACT_getColor=1;据此,aidl的实现原理基本可以了解。
四、参考资料:
1.http://www.tuicool.com/articles/FRNFFj;
2.http://null-point.iteye.com/blog/1447646;
五、后期计划
1.对Binder进一步了解;
2.了解一下Pacel数据机构和学习一下Android DexClassLoader类的应用;
3.就参考资料一里面的提到的获取Ibinder引用实现一下,还有参考资料一里面还提到不使
用Service实现服务,看一下怎么实现;
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- ActivityGroup实现Tab导航
activity_main.xml 布局文件<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/hometabs"android:layout_width="fill_parent&quo…...
2024/4/20 6:00:17 - [转] matlab 怎样做直线检测?
1 Matlab实现——霍夫变换直线检测2 【matlab攻坚】用matlab检测图片中的直线 3 Matlab实现Hough直线检测 4 图像检测:直线提取 Hal 怎样做直线检测?...
2024/4/20 8:42:21 - 实战:从 0 到 1 搭建 Java 并发爬虫框架
悔创阿里的马爸爸曾经说过:“数据是新一轮技术革命最重要的生产资料”,对于处于成长初中期的企业最缺的就是有用的基础数据,而如何快速补齐这些数据短板,相信大家都会想到爬虫,所以爬虫也成为近2年热门的大数据技术手段之一。本期的 Chat 就是教你如何从 0 到 1 快速搭建起…...
2024/4/17 4:01:18 - vue开发微信公众号之文件下载
开发微信公众号实现文件下载的时候问题就出现了,一般网站做法就用不了,因为微信内置浏览器不支持下载文件,这就需要你用外部浏览器了(一般都是用手机自带的浏览器)。 这边你需要新建一个中转页面,提醒用户要通过浏览器去下载文件。 将需要下载的文件获取到并展示在页面,…...
2024/4/17 4:02:00 - 模仿微信界面tabhost底部导航——使用继承ActivityGroup方式
在一般常见的app中,常常会用到底部导航,而android默认的是顶部导航。目前的android版本中,已经不再推荐使用extends TabActivity的方式来创建tabhost,但作为比较常见的一种方式,还是在自己做项目的过程中总结一下。 需要注意的是,每个tabhost选项卡可能是由一个Intent启动…...
2024/4/17 4:02:19 - 再荐《高效能人士的七个习惯》
最近托张迪同学的福,重读了《高效能人士的七个习惯》这本书(请点击链接查看豆瓣介绍),2008年7月我曾在《高效能人士的7个习惯》这篇日志中推荐过此书,再次向大家推荐之。 这本售价不到12元的小书,绝对值得花一两包烟钱,一块面膜的钱买来阅读与收藏。 张迪同学曾经的公司…...
2024/4/18 22:26:15 - 学渣讲爬虫之Python爬虫从入门到出门(第一讲)
学渣讲爬虫之Python爬虫从入门到出门(第一讲)目录学渣讲爬虫之Python爬虫从入门到出门第一讲 目录 爬虫的常用形式 爬虫的基本原理 前期准备 简单爬虫 爬虫实例爬虫的常用形式生活学习中,我们可能常常会遇到一些需要获取某类特定资源的情况,比如:需要若干包含某些个关键词…...
2024/4/19 21:48:22 - MATLAB: 用MATLAB发送邮件(以163邮箱为例)
MATLAB: 用MATLAB发送邮件(以163邮箱为例)问题描述有时我们运行一些耗时很长的程序,就让计算机自己跑,人走开了。这种情况下如果程序出错或者运行完毕,程序员不能及时获得通知。但是强大的MATLAB可以发送email,我们可以利用这个功能来提升开发体验。邮箱设置建议专门注册…...
2024/4/17 4:02:12 - 七个重要习惯——读《高效能人士的七个习惯》整理
个人的成功习惯一:积极主动习惯二:以始为终习惯三:要事第一 公众的成功习惯四:双赢思维习惯五:知彼解己习惯六:综合综效 习惯七:不断更新附图:转载于:https://www.cnblogs.com/ziqiuqiandao/archive/2012/03/24/2416126.html...
2024/4/17 4:01:36 - 【Android】Binder机制
在Android开发过程中,Binder的身影无处无处不在,我们编写的程序都使用过Binder机制(例如startActivity的执行过程)但是请问你知道什么是Binder么?在开发过程中你察觉到它的存在了么? 什么是Binder Binder翻译过来是“胶水“的意思,这个翻译分形象。Binder的主要工作就是…...
2024/3/28 20:39:55 - matlab 如何使用mex
MATLAB与C语言混合编程接口 MATLAB是一种解释性语言,不需要编译,调试比较方便,但是缺点是速度慢。这一点在执行复杂的科学算法的时候体现极为明显。而C语言虽然相对比 较复杂,但是执行效率很高,MATLAB很多内置函数都是用C写的。另外有时候很多算法已经已C语言的形式写好,…...
2024/4/17 4:01:36 - 《用Python写网络爬虫》——1.2 网络爬虫是否合法
本节书摘来自异步社区《用Python写网络爬虫》一书中的第1章,第1.2节,作者 [澳]Richard Lawson(理查德 劳森),李斌 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 网络爬虫是否合法 网络爬虫目前还处于早期的蛮荒阶段,“允许哪些行为”这种基本秩序还处于…...
2024/4/17 4:02:12 - 微信公众号开发实例
微信公众号开发实例文档下载地址: https://github.com/duangYiXia/WX-DEMO 下微信公众号开发实例01.docx本文档主要以天气查询为功能的微信公众号应用开发为例,详细地描述了微信公众号应用开发的环境搭建,开发过程,以及其它相关的知识。 1.简介 微信,是当下智能手机几…...
2024/4/17 4:00:42 - Android系统的Binder机制之二——服务代理对象(1)
http://my.unix-center.net/~Simon_fu/?p=894上文《Android系统的Binder机制之一——Service Manager》我们学习了Service Manager在Android Binder中的作用——服务(Service)注册,服务(Service)查询的功能。本文我们一起学习服务(Service)在客户端中的代理机制。重点介…...
2024/4/20 13:24:06 - 高效能人士的第二个习惯——以始为终
这一个习惯我认为是在说目标的重要性。这里的目标是指你人生的目标。、 践行以始为终的习惯: 从现在开始以你的人生目标做为衡量一切的标准,你的一言一行,一举一动,无论发生在何时,都必须遵守这一原则,即由个人最重视的期许或价值观来决定一切。牢记自己的目标或者使命,…...
2024/4/18 0:53:41 - 关于ActivityGroup使用的时候配合返回键的问题解决
自己开发项目碰到的问题,就是在ActivityGroup中有多个子activity。我想通过按两次返回键来退成应用程序,于是在框架类(ActivityGroup)中加了捕获返回键的工作。但是发现并不凑效。开始并未想到是ActivityGroup的问题,一直以为返回键在其他地方被拦截了。就找了很久没发现问…...
2024/4/17 4:02:00 - 微信公众号开发(二)
微信公众号开发(二) 咳咳,间隔了这么久,现在终于有时间继续了。废话不多说,接上篇微信公众号开发引言。 说明:博主使用的开发工具为IntelliJ IDEA,开发语言为JAVA。 环境搭建部分就不在这里多说什么了。使用IDEA创建一个SpringBoot项目,之后我们就进入开发…...
2024/4/17 4:02:00 - 高效能程序员的七个习惯
昨天收到一个读者留言,问作为程序员,有什么学习和工作上的好习惯可以借鉴?想了想,干脆附庸风雅一下,总结个『高效能程序员的七个习惯』吧。Disclaimer:一家之言,可不信,但不可全信。拥抱 unix 哲学每个程序员入门的第一堂和第二堂课应该是和 unix 哲学相关的内容,简言…...
2024/4/17 4:01:42 - 1小时入门 Python 爬虫(上)
随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。数据越来越值钱,爬虫工程师也越来越受欢迎。本场 Chat 主要介绍的内容如下:Python 基础知识学习途径Python 开发环境的搭建什么是爬虫爬虫的作用豆瓣短评的数据爬取适合人群…...
2024/4/17 4:02:12 - Binder机制的简介
首先Binder是Android系统进程间通信(IPC)方式之一。Binder使用Client-Server通信方式。Binder框架定义了四个角色:Server,Client,ServiceManager以及Binder驱动。其中Server,Client,ServiceManager运行于用户空间,驱动运行于内核空间。Binder驱动程序提供设备文件/dev/binde…...
2024/4/17 4:03:01
最新文章
- API请求报错 Required request body is missing问题解决
背景 在进行调用的时候,加载方法,提示以下错误 错误信息如下: {"code": 10001,"msg": "Required request body is missing: XXX","data": null,"extra": null }Required request body…...
2024/4/23 23:14:12 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - jenkins参数化构建
Jenkins 的参数化构建 Jenkins 是一个开源的持续集成和持续部署工具,它可以帮助开发者自动化构建、测试和部署软件项目。在本文中,我们将重点介绍如何使用 Jenkins 的参数化构建功能来创建更加灵活和可定制的项目。 参数化构建是 Jenkins 提供的一种强…...
2024/4/19 15:58:31 - linux系统编程 线程 p1
线程 1.线程的概念2.线程的创建/终止/取消,栈的清理2.1线程创建2.2线程终止2.3 栈的清理 1.线程的概念 线程就是一个正在运行的函数。 posix线程是一套标准,而不是实现。 openmp线程。 线程标识:pthread_t (linux环境下是整形数&…...
2024/4/23 6:25:50 - 增加网站搜索引擎排名的6个准则
怎样提高网站排名首页 在竞争激烈的网络世界中,网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页,意味着更多的曝光和点击率。以下是一些方法,可以帮助您提高网站在搜索引擎中的排名,让其跻身首页…...
2024/4/23 6:25:30 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/23 20:58:27 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/23 13:30:22 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/23 13:28:06 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/20 23:26:47 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/23 13:27:44 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/19 11:57:53 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/23 13:29:53 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/23 13:27:22 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/23 13:28:42 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/23 22:01:21 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/23 13:29:23 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/23 13:27:46 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/23 13:47:22 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/19 11:59:23 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/19 11:59:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/23 13:28:08 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/23 13:29:47 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/23 13:28:14 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/23 13:27:51 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/23 13:27:19 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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