本篇主要通过结合已经阅读的Binder机制相关资料(《Android开发艺术探索》和 http://weishu.me/2016/01/12/binder-index-for-newer/),通过AIDL来进行Binder机制的初步理解

感谢两位作者:任玉刚和WeiShu

  • 一 一个AIDL Demo的组成部分
  • 二 通信机制的分析
    • 1 bindService 与 onBind
    • 2 代理是如何传递过去的呢
    • 3 数据传递的实现
  • 三 小结

一、 一个AIDL Demo的组成部分

当我们想对一个自定义数据类型(如:Book)来实现跨进程通信时,AIDL的实现核心包括四个部分,分别是:(1).Book.java (2).Book.aidl (3).IBookManager.aidl (4).IBookManager.java
以上4个文件是aidl不可缺少的部分,怎么实现就不说了,到处都有例子说明。这里就简单贴一下各个文件的代码:

/*** Created by songjunmin on 2016/11/14.* 支持跨进程传输的数据类型*/public class Book implements Parcelable {public int bookId;public String bookName;//普通构造函数public Book(int bookId, String bookName) {this.bookId = bookId;this.bookName = bookName;}//反序列化使用的构造函数public Book(Parcel parcel) {this.bookId = parcel.readInt();this.bookName = parcel.readString();}//序列化@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel parcel, int i) {parcel.writeInt(bookId);parcel.writeString(bookName);}//反序列化public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() {@Overridepublic Book[] newArray(int i) {return new Book[i];}@Overridepublic Book createFromParcel(Parcel parcel) {return new Book(parcel);}};@Overridepublic String toString() {return "book id = " + bookId + "; book Name = " + bookName + "\n";}
}
// Bookd.aidl
package com.example.songjunmin.aidldemo;// Declare any non-default types here with import statementsparcelable Book;
// IBookManager.aidl
package com.example.songjunmin.aidldemo;// Declare any non-default types here with import statements
import com.example.songjunmin.aidldemo.Book;
interface IBookManager {List<Book> getBookList();void addBook(in Book book);
}
/** This file is auto-generated.  DO NOT MODIFY.* Original file: /Users/songjunmin/GitHub/AIDLdemo/app/src/main/aidl/com/example/songjunmin/aidldemo/IBookManager.aidl*/
package com.example.songjunmin.aidldemo;
public interface IBookManager extends android.os.IInterface
{
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements com.example.songjunmin.aidldemo.IBookManager
{
private static final java.lang.String DESCRIPTOR = "com.example.songjunmin.aidldemo.IBookManager";
/** Construct the stub at attach it to the interface. */
public Stub()
{
this.attachInterface(this, DESCRIPTOR);
}
/*** Cast an IBinder object into an com.example.songjunmin.aidldemo.IBookManager interface,* generating a proxy if needed.*/
public static com.example.songjunmin.aidldemo.IBookManager asInterface(android.os.IBinder obj)
{
if ((obj==null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin!=null)&&(iin instanceof com.example.songjunmin.aidldemo.IBookManager))) {
return ((com.example.songjunmin.aidldemo.IBookManager)iin);
}
return new com.example.songjunmin.aidldemo.IBookManager.Stub.Proxy(obj);
}
@Override public android.os.IBinder asBinder()
{
return this;
}
@Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
{
switch (code)
{
case INTERFACE_TRANSACTION:
{
reply.writeString(DESCRIPTOR);
return true;
}
case TRANSACTION_getBookList:
{
data.enforceInterface(DESCRIPTOR);
java.util.List<com.example.songjunmin.aidldemo.Book> _result = this.getBookList();
reply.writeNoException();
reply.writeTypedList(_result);
return true;
}
case TRANSACTION_addBook:
{
data.enforceInterface(DESCRIPTOR);
com.example.songjunmin.aidldemo.Book _arg0;
if ((0!=data.readInt())) {
_arg0 = com.example.songjunmin.aidldemo.Book.CREATOR.createFromParcel(data);
}
else {
_arg0 = null;
}
this.addBook(_arg0);
reply.writeNoException();
return true;
}
}
return super.onTransact(code, data, reply, flags);
}
private static class Proxy implements com.example.songjunmin.aidldemo.IBookManager
{
private android.os.IBinder mRemote;
Proxy(android.os.IBinder remote)
{
mRemote = remote;
}
@Override public android.os.IBinder asBinder()
{
return mRemote;
}
public java.lang.String getInterfaceDescriptor()
{
return DESCRIPTOR;
}
@Override public java.util.List<com.example.songjunmin.aidldemo.Book> getBookList() throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
java.util.List<com.example.songjunmin.aidldemo.Book> _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
mRemote.transact(Stub.TRANSACTION_getBookList, _data, _reply, 0);
_reply.readException();
_result = _reply.createTypedArrayList(com.example.songjunmin.aidldemo.Book.CREATOR);
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
@Override public void addBook(com.example.songjunmin.aidldemo.Book book) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
try {
_data.writeInterfaceToken(DESCRIPTOR);
if ((book!=null)) {
_data.writeInt(1);
book.writeToParcel(_data, 0);
}
else {
_data.writeInt(0);
}
mRemote.transact(Stub.TRANSACTION_addBook, _data, _reply, 0);
_reply.readException();
}
finally {
_reply.recycle();
_data.recycle();
}
}
}
static final int TRANSACTION_getBookList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
static final int TRANSACTION_addBook = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
}
public java.util.List<com.example.songjunmin.aidldemo.Book> getBookList() throws android.os.RemoteException;
public void addBook(com.example.songjunmin.aidldemo.Book book) throws android.os.RemoteException;
}

在上面的四个文件中,有两个java文件和两个aidl文件,Book.java是我们支持序列化跨进程传递的数据类,IBookManager.java是aidl工具为我们生成的最终跨进程接口,服务端和客户端通过这个接口来实现跨进程通信。

有了aidl文件之后,使用姿势如下:

/*** Created by songjunmin on 2016/11/14.* 建立服务端的Service,当来自别的进程需要进行IPC请求时,需要绑定到该Service获取Binder代理*/public class AIDLService extends Service {private static final String TAG = "AIDLService";//使用CopyOnWriteArrayList来支持线程同步,因为会有多个客户端访问服务端的场景private CopyOnWriteArrayList<Book> mBookList = new CopyOnWriteArrayList<>();private Binder mBinder = new IBookManager.Stub(){//Stub是继承了Binder并且实现IBookManager接口的//所以当进行实现方法的时候,会发现即有IBookManager里的接口方法,也有Binder里的覆写方法//我们需要实现接口方法@Overridepublic List<Book> getBookList() throws RemoteException {return mBookList;}@Overridepublic void addBook(Book book) throws RemoteException {mBookList.add(book);}};@Nullable@Overridepublic IBinder onBind(Intent intent) {return mBinder;}@Overridepublic void onCreate() {super.onCreate();mBookList.add(new Book(1,"Android"));mBookList.add(new Book(2,"iOS"));}
}
public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";private ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {IBookManager bookManager = IBookManager.Stub.asInterface(binder);try {//客户端添加一本书bookManager.addBook(new Book(3,"Python"));List<Book> list = bookManager.getBookList();for(int i = 0; i < list.size(); i++){Book book = list.get(i);Log.d(TAG, book.toString());}} catch (RemoteException e) {e.printStackTrace();}Log.d(TAG,"绑定成功");}@Overridepublic void onServiceDisconnected(ComponentName name) {Log.d(TAG, "解除绑定");}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent(MainActivity.this, AIDLService.class);bindService(intent,conn, Context.BIND_AUTO_CREATE);}@Overrideprotected void onDestroy() {unbindService(conn);super.onDestroy();}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.songjunmin.aidldemo"><application
        android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity><service android:name=".AIDLService"android:process=":remote"/></application></manifest>

在Manifest文件中,我们定义同一个app下有一个来自其他进程的服务,名为AIDLService,客户端通过bindService来绑定远程服务。
下面来进行跨进程通信的一步步分析。

二、 通信机制的分析

2.1 bindService 与 onBind

在客户端,通过bindService来绑定服务,在bindService方法中需要建立一个ServiceConnection对象。 在服务端的回调方法onBind拿到一个IBinder对象,最后递交给客户端实现的ServiceConnection对象,在该对象的onServiceConnected(ComponentName name, IBinder binder)方法中完成对象的代理获取。
对这个过程进行拆分:

在AIDLService的onBind方法是这样的:

@Nullable
@Override
public IBinder onBind(Intent intent) {return mBinder;
}

在onBind方法中返回了IBinder类型的mBinder对象,那么mBinder对象是怎么来的呢?在服务端创建了mBinder对象

private Binder mBinder = new IBookManager.Stub(){//Stub是继承了Binder并且实现IBookManager接口的//所以当进行实现方法的时候,会发现即有IBookManager里的接口方法,也有Binder里的覆写方法//我们需要实现接口方法@Overridepublic List<Book> getBookList() throws RemoteException {return mBookList;}@Overridepublic void addBook(Book book) throws RemoteException {mBookList.add(book);}
};

可以看到,在服务端,通过AIDL接口的内部类Stub,创建了Binder对象mBinder。
在aidl文件中可以知道内部类Stub是继承自Binder类的,而Binder又实现了IBinder接口,所以可以在onBind方法中返回。
具体看一下资料中对Binder和IBinder关系的说明:
这里写图片描述

    从该说明中可以知道,凡是实现了IBinder接口的,就会受到底层驱动的支持(我可以理解为受到上帝的眷顾吗),从而可以跨进程传递这个数据。而Binder虽然实现了IBinder接口,但是其定义更加适合为本地的对象。在该例子中,创建的mBinder是属于服务端自己的本地Binder对象,该对象可以通过跨进程传输协议(IBinder)来进行传递。

但是,但是,但是…(开始到第一个重要注意点了)

本地Binder通过跨进程协议(IBinder),传递到其他进程的并不是真身而是一个代理。

2.2 代理是如何传递过去的呢?

首先看客户端是如何实现ServiceConnection这个对象的:

public void onServiceConnected(ComponentName name, IBinder binder) {IBookManager bookManager = IBookManager.Stub.asInterface(binder);
}

这个代码的理解就是:1.mBinder由于实现了IBinder接口,所以具体所谓的跨进程传递自己的能力;2.实际上,传递的是mBinder代理,而并不是mBinder真身
在IBookManager.Stub.asInterface方法中,完成了真身和代理的转变。看看asInterface的实现:

/*** Cast an IBinder object into an com.example.songjunmin.aidldemo.IBookManager interface,* generating a proxy if needed.*/
public static com.example.songjunmin.aidldemo.IBookManager asInterface(android.os.IBinder obj) {if ((obj == null)) {return null;}android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);if (((iin != null) && (iin instanceof com.example.songjunmin.aidldemo.IBookManager))) {return ((com.example.songjunmin.aidldemo.IBookManager) iin);}return new com.example.songjunmin.aidldemo.IBookManager.Stub.Proxy(obj);}

从这段代码中可以看出,asInterface方法接收了一个IBinder的接口对象,这个对象怎么来的呢?实际上是底层的Binder驱动提供的,在onBind方法中返回的mBinder实际上首先扔给了驱动,binder驱动进行了对mBinder包装改变(因为binder驱动也在一个进程中,onBind返回的过程由于首先给binder驱动,所以也属于进程间对象的传递,所以binder驱动肯定会对mBinder进行包装和改变),binder驱动完成了改变之后,又交给了客户端的进程,所以客户端进程中的onServiceConnected才可以拿到一个IBinder的对象,并执行后续的asInterface方法。以上就解释了asInterface方法的参数IBinder obj的由来,它并不是直接的mBinder(服务端的onBind方法所返回的)。

了解完参数之后,先不进入asInterface方法内部,再来看一下asInterface方法的返回值:是com.example.songjunmin.aidldemo.IBookManager
这个返回值类型就是我们的 AIDL接口,我们的所谓AIDL跨进程通信,实际上基于的是AIDL接口,在本例中,就是AIDL的IBookManager接口,所以我们需要返回AIDL接口 。
明确了返回值和方法参数之后,可以进入到asInterface方法内部了:
首先需要知道的是,这个方法是在客户端进程中调用的,所以首先执行本地AIDL接口查询,使用obj.queryLocalInterface(DESCRIPTOR)
由于在客户端进程,所以拿到binder驱动返回的IBinder对象obj之后执行本地查询,查询什么呢?查询DESCRIPTOR,即 :

private static final java.lang.String DESCRIPTOR = "com.example.songjunmin.aidldemo.IBookManager";

这里注意一点:一般如果客户端进程是来自别的应用A,而服务端进程也在一个应用B中,此时的跨进程同时是属于不同应用间的,所以在客户端使用上述方法的话,肯定也需要有与服务端同样的aidl文件.
正如《Android开发艺术探索》的P73页所说。不然客户端都没有DESCRIPTOR这个变量,怎么查询呢对吧.
查询完成之后判断本进程是否有该AIDL接口,若有,则执行:

if (((iin != null) && (iin instanceof com.example.songjunmin.aidldemo.IBookManager)))

若无,则通过内部类Stub的内部类Proxy来创建一个代理对象:

private static class Proxy implements com.example.songjunmin.aidldemo.IBookManager {private android.os.IBinder mRemote;Proxy(android.os.IBinder remote) {mRemote = remote;}//...省略}

代理对象内部有一个mRemote的IBinder对象,所以这个对象也是可以跨进程的(其实本质上都是客户端的Binder对象mBinder)。

在这个代理方法中,将binder驱动传递给客户端进程的IBinder赋值给了Proxy代理类的私有变量mRemote,而Proxy是Stub的内部类,这里千万不要被两个类在同一个文件中给弄迷糊了,这两个类在实际执行的时候是分属不同的进程空间中的。Proxy这个内部类实现了AIDL接口,所以其对象也是可以供客户端进程使用的AIDL接口对象。这样的话,就通过服务端的mBinder(源自AIDL接口的内部类Stub)、客户端的asInterface得到AIDL接口对象(基于代理)实现了跨进程AIDL接口的使用,进行数据交互。

2.3 数据传递的实现。

客户端拿到的是服务端的代理对象,无法直接操作服务端的对象(为了安全起见),那么拿到代理对象也可以给客户端提供一种真实操作服务端对象的假象(比如,代理对象也向客户端提供了一个与真实服务端对象中相同的同名方法),但是这仅仅只是假象,名称相同,方法内部的执行逻辑在代理对象和真实服务端对象中是不一样的。
代理对象从客户端那拿到客户端请求的数据之后,进行包装,然后递交给底层的Binder驱动,驱动解析之后扔给真正的服务端对象,服务端再通过同名方法进行真实的逻辑处理。

@Override
public java.util.List<com.example.songjunmin.aidldemo.Book> getBookList() throws android.os.RemoteException {android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();java.util.List<com.example.songjunmin.aidldemo.Book> _result;try {_data.writeInterfaceToken(DESCRIPTOR);mRemote.transact(Stub.TRANSACTION_getBookList, _data, _reply, 0);_reply.readException();_result = _reply.createTypedArrayList(com.example.songjunmin.aidldemo.Book.CREATOR);} finally {_reply.recycle();_data.recycle();}return _result;
}
在这个代码块中,可以看到,代理对象压根没做什么真实在getBookList逻辑,其核心只是创建了一个包装客户端数据的_data,建立了一个可以返回给客户端的_reply,以及该方法的返回值数据_result。之后就通过mRemote.transact方法,指定了客户端调用的方法名称ID,以及两个数据包装对象,就一并扔给了Binder驱动了.........。此时,客户端线程会处于挂起状态,傻傻的等待服务端返回。Binder驱动在收到代理递交过来的数据之后,经过敏锐的分析,发现原来这个是代理传递过来的,辣么代理的本意应该就是要告诉真正的服务端对象,告诉啥呢?要服务端对象执行getBookList方法,此时,bind驱动会找到真实的服务端对象(因为所有的跨进程服务端对象都会注册到Binder驱动中),并执行IBinder的ontransact方法,从而回调了真实服务端的ontransact方法:
@Override
public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {switch (code) {case INTERFACE_TRANSACTION: {reply.writeString(DESCRIPTOR);return true;}case TRANSACTION_getBookList: {data.enforceInterface(DESCRIPTOR);java.util.List<com.example.songjunmin.aidldemo.Book> _result = this.getBookList();reply.writeNoException();reply.writeTypedList(_result);return true;}
//省略
}

在该方法中,定位到getBookList方法的逻辑,发现调用了我们实际定义的接口方法getBookList,而该接口的具体实现就在服务端上层来实现的,需要开发人员自己定义:

private Binder mBinder = new IBookManager.Stub(){//Stub是继承了Binder并且实现IBookManager接口的//所以当进行实现方法的时候,会发现即有IBookManager里的接口方法,也有Binder里的覆写方法//我们需要实现接口方法@Overridepublic List<Book> getBookList() throws RemoteException {return mBookList;}@Overridepublic void addBook(Book book) throws RemoteException {mBookList.add(book);}
};

三、 小结

这样子,就完成了服务端各个部分的意义了,客户端的各个部分的意义也明确了。
AIDL为我们生成的aidl接口名称和我们自定义的接口名称重名,很容易混淆我们的理解,这一点要明确。IBookManager.java是真正的AIDL接口,是用于跨进程实现的,内部的Stub实现了我们的IBookManager.aidl里声明的接口,这个是用于服务端上层自己实现的,AIDL中只是拿了个方法的壳而已。

所以,Binder机制的核心是“粘合剂”,当然AIDL只是粘合剂Binder所应用的一个场景,什么场景呢?跨进程通信,这里的通信实际上是调用两个进程都可以使用的接口方法,但是互相使用方法总要传递数据吧,又有代理的加入,所以才有了粘合剂Binder的必要。

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

相关文章

  1. 高效能人士的七个习惯(读书笔记)

    写于2014年夏高效能人士的七个习惯1 1 积极主动-个人愿景的原则1.1 积极主动不仅指行事的态度,还意味着人一定要对自己的人生负责。个人行为取决于自身的抉择,而不是外在的环境,人类应该有营造有利的外在环境的积极性和责任感1.2 伤害我们的并非悲惨遭遇本身,而是我们对于…...

    2024/3/7 23:17:19
  2. CentOS7 启动MATLAB卡死在启动界面的解决办法

    当我装完CentOS7后,刚开始时安装的MATLAB 2014a,安装和破解均没有遇到任何问题,但是打开MATLAB2014a后,便一直卡死在启动界面,等了10分钟依然不进入MATLAB主界面。我以为是MATLAB的问题,重装两次之后问题依旧。之后根据 linux(x64)下安装Matlab 2015b破解版(含安装包) …...

    2024/3/7 23:17:20
  3. Java微信公众号开发面试题

    1.订阅号,服务号,企业号的区别?1)业务侧重点订阅号侧重互动服务号侧重功能交互和企业展示(比如支持微信支付,微店推广功能)企业号侧重企业应用或企业移动互联(简化管理流程,提高组织协同效率)2)适用人群订阅号:所有服务号:企业,媒体,政府,其他组织企业号:企业…...

    2024/3/7 23:17:19
  4. (转载)Android两种Tab分页的方式:TabActivity和ActivityGroup以及Android项目几种常见的应用架构...

    在Android里面Tab分页,常用的方法有两种: 一、TabActivity和TabHost的结合 1.主类继承TabActivity public class Tagpage extends TabActivity 2.获取当前TabHost对象 final TabHost tabHost = getTabHost(); 3.添加Tab分页标签,这里就是关键,把每个分页面链接成Activity。页…...

    2024/3/29 0:38:43
  5. 前程无忧python爬虫

    前程无忧python爬虫 实践要求做一个数据分析以及处理的实验,我负责的是爬取数据的这一块任务。做爬虫的话,python是比较好用的,于是学习了一小段时间,专门学着写了一个小爬虫。爬取的是一些静态网页上的内容。环境 语言:python 3.8 工具:PyCharm 2019 操作系统:win10 前…...

    2024/3/29 0:39:59
  6. 借助 AIDL 理解 Android Binder 机制——Binder 来龙去脉

    AIDL 是 Android Interface Definition Language(Android 接口定义语言)的缩写,它是 Android 进程间通信的接口语言。由于 Android 系统的内核是 Linux,它采用了进程隔离机制,使得不同的应用程序运行在不同的进程当中,有时候两个应用之间需要传递或者共享某些数据,就需要…...

    2024/3/7 23:17:15
  7. Tabhost与activitygroup并用

    不少人发现 用完 tabhost 后 当在布局中的一个buton中启动另一个activity 就会发现没有tab 卡片 也就是说他不在tabhost中启动的Activity 而是另起一页 可以这么理解吧 总之 让人很头疼今天就介绍一个解决方案 解决这个办法import android.os.Bundle; import android.app…...

    2024/3/7 23:17:14
  8. Matlab计算熵权法

    如需转载,请注明来源,谢谢合作。 若本文对您有一点点的帮助,欢迎点赞、评论和关注。您的鼓励和支持是我继续学习和分享的动力。 **熵权法是一种根据包含各个变量的变异程度进行赋权的方法,是一种客观赋权法。**而直接给定变量权重或者专家打分给出权重则属于主观赋权法。熵…...

    2024/3/26 0:05:31
  9. 成长型思维——人不成熟的五大特征和高效能人士的七个习惯

    成熟,指人的思想观念之转变,从幼稚向更高一级的转变,对事和物的看法更加理智,并且这一过程中往往伴随着周围环境的改变而发生,也包括其他人的影响。人不成熟的五大特征一、立即要回报二、不自律三、经常被情绪所左右四、不愿学习,自以为是,没有归零心态五、做事情不靠信…...

    2024/3/28 20:39:24
  10. python_flask微信公众号开发-入门

    微信公众号 1.微信公众号的开发有两种模式,一种是自带编辑模式,在官网上可以进行简单的操作,自动回复以及自定义菜单等功能。第二种是开发者模式,这种模式需要有编程基础,优势是可以实现复杂的应用场景。因为编辑模式和开发者模式不能同时使用,所以大家需要根据自身的需求…...

    2024/3/28 20:39:22
  11. python爬虫从入门到放弃(一)- 认识爬虫

    什么是爬虫百度百科里的解释是这样的:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。爬虫就是一种可以按照…...

    2024/3/28 20:39:21
  12. Matlab 函数返回一个值--样例

    目录一、matlab的函数文件返回一个值写法二、简单的例子三、结果截图博主针对返回多个值也有相关样例,可见于博主文章:matlab 函数返回多个值--样例一、Matlab的函数文件--返回一个值--写法为:1.第一行写 function 返回值/返回矩阵=该函数文件名(参数1,参数2,...,参数n)…...

    2024/3/28 20:39:20
  13. ActivityGroup中出现的Unable to add window -- token

    08-29 15:46:14.930: E/AndroidRuntime(28804): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@40603cc0 is not valid; is your activity running?它不知道是那个Activity了,需要调用…...

    2024/3/28 20:39:18
  14. 高效能人士的七个习惯 与成功有约

    1.积极主动 2.以终为始 3.要事第一 4.双赢思维 5.知彼解己 6.集思广益、综合综效 7.均衡发展不断创新高效人士的七个习惯 习惯一:主动积极 主动积极即采取主动,为自己过去、现在及未来的行为负责,并依据原则及价值观,而非情绪或外在环境来下决定。主动积极的人是改变的催生…...

    2024/3/28 20:39:18
  15. 干货下载:可能是你见过的最全的网络爬虫总结

    昨天的时候我参加了一场 Python 网络爬虫主题的分享活动,主要以直播的形式分享了我从事网络爬虫相关研究以来的一些经验总结,整个直播从昨天下午 1 点一直持续到下午 5 点,整整四个小时。整个分享分为三个阶段,第一阶段先介绍了自己从大学以来从事编程开发以来的相关历程,…...

    2024/3/28 20:39:16
  16. (PHP)微信公众号基础接口access_token的获取与缓存

    https://www.cnblogs.com/king2016/p/6096776.html 注意: 1)公众号开发文档中说过,用中控服务器来获取和缓存、提供access_token。其他业务逻辑点统一访问中控服务器以获取。不建议在各个业务逻辑点分别获取access_token,防止频繁获取而超过公众号所规定的获取次数。(思路…...

    2024/3/28 20:39:20
  17. matlab函数定义详解

    但凡经过编程熏陶的人,在学习其他一门陌生的编程语言时,往往会与已经学过的语言相比较。而语法的比较往往是情不自禁的。在matlab中,函数的概念或许没有其他语言那么广泛,特性没有那么丰富,但基本的功能都已具备。在数学中,定义一个函数,我们需要明确定义域、值域、表达…...

    2024/3/4 7:23:48
  18. 是ActivityGroup 的BUG?是对机制理解不深刻?还是逻辑错误?还是。。。不知道了?...

    首先,先喷一下张艺谋的片子,你他妈太黑了~!什么史上最干净的爱情片,我说是史上最烂的爱情片,只能把无知当纯情。拍电影拍得一点诚意都没有,只会抄韩国的爱情片,记得有一部韩国片跟你这部剧情都差不多~!你就使劲抄吧~!!浪费我160大洋,进去睡觉。喷到这里。这一两天碰…...

    2024/3/29 0:45:27
  19. 高效能人士的7种习惯,学习起来!!!

    你有过这样的问题吗?要做的事情太多了,但是时间总是不够用;很忙,但是看不出来这样工作对未来有何意义;看到他人成功,表面上祝福,心里却难过等等。如果有的话,就需要改变现状,改变自己了。需要怎么改变呢?欲知如何改变?当然是接着往下看啦!!! (以下截图均来自办公…...

    2024/3/29 0:43:10
  20. android binder机制之——(创建binder服务)

    Binder机制编程 http://blog.csdn.net/ylyuanlu/article/details/6639328前面的几篇文章详细介绍了android中binder机制的方方面面,相信你对binder机制已经有了较深刻的理解。俗话说得好“学以致用”,下面我们就通过在android系统中创建一个我们自己的binder服务,来加深对bi…...

    2024/3/7 23:17:05

最新文章

  1. Kafka入门到实战-第二弹

    Kafka入门到实战 Kafka快速开始官网地址Kafka概述Kafka术语Kafka初体验更新计划 Kafka快速开始 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流…...

    2024/3/29 16:40:59
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 云数据仓库Snowflake论文完整版解读

    本文是对于Snowflake论文的一个完整版解读&#xff0c;对于从事大数据数据仓库开发&#xff0c;数据湖开发的读者来说&#xff0c;这是一篇必须要详细了解和阅读的内容&#xff0c;通过全文你会发现整个数据湖设计的起初原因以及从各个维度&#xff08;架构设计、存算分离、弹性…...

    2024/3/29 14:43:32
  4. 蓝桥杯嵌入式学习笔记(6):IIC程序设计

    目录 前言 1. IIC基本原理 2. 电路原理 3. 代码编程 3.1 预备工作 3.2 AT24C02写读功能编写 3.2.1 AT24C02写操作实现 3.2.2 AT24C02读操作实现 3.3 MCP4017写读功能编写 3.3.1 MCP4017写操作实现 3.3.2 MCP4017读操作实现 3.4 main.c编写 3.4.1 头文件引用 3.4.…...

    2024/3/28 13:29:32
  5. JavaScript高级(十三)---ES6中Set,map

    ES6 Set 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&#xff1a;Set、Map&#xff0c;以及它们的另外形式WeakSet、WeakMap。 Set是一个新增的数据结构&#xff0c;可以用来保存数据&#xff0c;类似于数组&a…...

    2024/3/29 8:06:58
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/3/27 10:21:24
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/3/24 20:11:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/3/29 2:45:46
  9. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/3/29 16:26:39
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

    2024/3/29 5:19:52
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

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

    2024/3/28 17:01:12
  12. 【外汇早评】美欲与伊朗重谈协议

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

    2024/3/29 11:11:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/3/29 1:13:26
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/3/29 8:28:16
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/3/29 7:41:19
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/3/24 20:11:18
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/3/29 9:57:23
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/3/29 0:49:46
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/3/24 20:11:15
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/3/27 7:12:50
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/3/24 20:11:13
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/3/26 11:21:23
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/3/28 18:26:34
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/3/28 12:42:28
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/3/28 20:09:10
  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