近期在修改页面结构过程中,遇到了一个特殊的问题,现在做个总结。

一、背景介绍

先说下Feed首页的页面结构,为了满足运营多种动态化的需求,Feed首页采用了以下图所示的页面结构,从页面到最小粒度的控件可以分成5个层级

index.png

  1. HomePageActivity
    • 负责解析跳转参数、页面埋点、初始化等相关逻辑
  2. TabContainerFragment
    • Homepage真正的界面主体是通过该Fragment去承载的,内部是可以切换的一个tablayout;
    • 满足了运营对“HP上的tabs可以动态配置,灵活添加”
  3. TabItemFragment
    • 由FeedBaseFragment延伸出来的各种不同Feed流, 主体是一个列表,呈现Feed流信息;
    • 满足了运营对“不同的tab可以动态配置数据源,以呈现不同的内容聚合性”
  4. FeedItem
    • 具体的一个Feed信息;
    • 满足了运营对“不同的Feed类型要有不同的Feed样式进行承载、甚至是氛围区别”;
  5. Pdp
    • Feed信息所包含的商品图片、或者自定义图片
    • 满足了运营对“Feed可以透出商品图或者自定义图等信息,来吸引用户的眼球,快速表述feed的语义”;

再介绍下修改的原由:应用原来的使用的主框架是tabhost + activity,最近android架构升级要求替换为FragmentTabHost,为了同时满足并行开发和尽量保证代码逻辑改变不大, 因此计划将原FeedHomePageActivity中的业务再次封装为一个FeedHomeFragment给框架团队,其内部逻辑和FeedHomePageActivity保持一致

其中一些细节调整不再赘述,我们进入本篇的正题: 在将Activity替换为Fragment后,我们发现原来Viepager中的TabFragment所设计的基于setMenuVisibility的可视生命周期监听失效了,而该生命周期承载了我们重要的业务功能,由此引发了我们对原因的分析。

二、问题描述

TabItemFragment 原来使用了 setMenuVisibility 来判断页面是否对用户可见

	private boolean isExitViewpager = false;protected boolean isViewCreated = false;protected boolean isMenuVisible = false;@Overridepublic void setMenuVisibility(boolean menuVisible) {super.setMenuVisibility(menuVisible);LLog.i(TAG, String.format("%s : %s : %s : %s", pageTagMark(), "setUserVisibleHint", menuVisible, isViewCreated));isMenuVisible = menuVisible;if (!menuVisible&& isExitViewpager&& isViewCreated) {onPagePause();}if (menuVisible&& isExitViewpager&& isViewCreated) {onPageStart();}}@Overridepublic void onResume() {super.onResume();LLog.i(TAG, String.format("%s : %s : %s : %s", pageTagMark(), "onResume", isViewCreated, isMenuVisible));if (isExitViewpager) {if (isViewCreated && isMenuVisible) {onPageStart();}} else {onPageStart();}}@Overridepublic void onPause() {super.onPause();LLog.i(TAG, String.format("%s : %s", pageTagMark(), "onPause"));if (isExitViewpager) {if (isMenuVisible) {onPagePause();}} else {onPagePause();}}

当顶级容器为Activity时该判断表现良好,但是当在新框架中FragmentTabHost中时,发现再次回到Feed频道后,TabItemFragment#onResume方法中的isMenuVisible竟然变为了false, 这就引发了onPageStart()方法没有调用!

通过初步分析,我们发现新老结构的差异在于,新框架下重回Feed渠道时会触发FragmentStatePagerAdapter.restoreState,该函数调用了setMenuVisibility(false),哪怕页面时处于显示状态的

那么这个函数是什么作用,为什么会被新框架调用呢? 我们从新框架引发的变化开始分析

三、FragmentTabHost 对FeedHomeFragment生命周期的影响

我们知道Fragment的常见生命周期如下:

20140719225005356.png

  1. onAttach
  2. onCreate
  3. onCreateView
  4. onViewCreated
  5. onResume
  6. onPause
  7. onStop
  8. onDestroyView
  9. onDestroy
  10. onDetach

我们对fragment进行管理时,往往使用的是FragmentManager, 其中有两对关键函数:

  • add\remove(replace)
    • remove从Activity中移除一个Fragment时,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁
    • 被移除的Fragment的调用顺序为:onPause, onStop, onDestroyView, onDestroy, onDetach
    • 被移除的Fragment再次加入后顺序为:从onAttach开始
    • 如果remove后,使用addToBackStack函数
      • 只存在三种状态的切换:onPause,onStop,onDestroyView
      • 仅仅只是界面被销毁onDestroyView,而fragOne对象的实例依然被保存在FragmentManager中(因为无onDestroy,onDetach),它的部分状态依然被保存在FragmentManager中
      • 再次加入会直接从onCreateView开始
  • show()/hide()
    • 使用show()/hide()时一般是会使用addToBackStack,,因为要使用show()/hide()前提是该Fragment实例已经存在,只不过我们是否将其界面显示出来
    • hide从Activity中隐藏一个Fragment时,不会触发上述的生命周期函数

那么 FragmentTabHost 使用的是哪种方式呢?我们进入源码分析,入口从 onTabChanged(String tabId) 开始:

    public void onTabChanged(String tabId) {if (this.mAttached) {FragmentTransaction ft = this.doTabChanged(tabId, (FragmentTransaction)null);if (ft != null) {ft.commit();}}if (this.mOnTabChangeListener != null) {this.mOnTabChangeListener.onTabChanged(tabId);}}

其中会调用doTabChanged(@Nullable String tag, @Nullable FragmentTransaction ft)去获取一个FragmentTransaction,并commit提交

    @Nullableprivate FragmentTransaction doTabChanged(@Nullable String tag, @Nullable FragmentTransaction ft) {FragmentTabHost.TabInfo newTab = this.getTabInfoForTag(tag);if (this.mLastTab != newTab) {if (ft == null) {ft = this.mFragmentManager.beginTransaction();}if (this.mLastTab != null && this.mLastTab.fragment != null) {ft.detach(this.mLastTab.fragment);}if (newTab != null) {if (newTab.fragment == null) {newTab.fragment = Fragment.instantiate(this.mContext, newTab.clss.getName(), newTab.args);ft.add(this.mContainerId, newTab.fragment, newTab.tag);} else {ft.attach(newTab.fragment);}}this.mLastTab = newTab;}return ft;}

我们看到其中:

  1. 对当前的Fragment,调用了FragmentTransaction.detach
  2. 对tab对应的fragment进行了实例化,如果已经有实例的fragment,会触发FragmentTransaction的attach预操作

我们吧目光转向FragmentTransaction的实现类BackStackRecord:

   public FragmentTransaction attach(Fragment fragment) {this.addOp(new BackStackRecord.Op(7, fragment));return this;}public FragmentTransaction detach(Fragment fragment) {this.addOp(new BackStackRecord.Op(6, fragment));return this;}

内部维护一个操作栈队列( ArrayList<BackStackRecord.Op> mOps = new ArrayList();),执行了对应的入队操纵。 真正的执行是在commit函数中

    public int commit() {return this.commitInternal(false);}int commitInternal(boolean allowStateLoss) {if (this.mCommitted) {throw new IllegalStateException("commit already called");} else {if (FragmentManagerImpl.DEBUG) {Log.v("FragmentManager", "Commit: " + this);LogWriter logw = new LogWriter("FragmentManager");PrintWriter pw = new PrintWriter(logw);this.dump("  ", (FileDescriptor)null, pw, (String[])null);pw.close();}this.mCommitted = true;if (this.mAddToBackStack) {this.mIndex = this.mManager.allocBackStackIndex(this);} else {this.mIndex = -1;}this.mManager.enqueueAction(this, allowStateLoss);return this.mIndex;}}

我们现在把目光转移到回调BackStackRecord#executeOps():

 void executeOps() {int numOps = this.mOps.size();for(int opNum = 0; opNum < numOps; ++opNum) {BackStackRecord.Op op = (BackStackRecord.Op)this.mOps.get(opNum);Fragment f = op.fragment;if (f != null) {f.setNextTransition(this.mTransition, this.mTransitionStyle);}switch(op.cmd) {case 1:f.setNextAnim(op.enterAnim);this.mManager.addFragment(f, false);break;case 2:default:throw new IllegalArgumentException("Unknown cmd: " + op.cmd);case 3:f.setNextAnim(op.exitAnim);this.mManager.removeFragment(f);break;case 4:f.setNextAnim(op.exitAnim);this.mManager.hideFragment(f);break;case 5:f.setNextAnim(op.enterAnim);this.mManager.showFragment(f);break;case 6:f.setNextAnim(op.exitAnim);this.mManager.detachFragment(f);break;case 7:f.setNextAnim(op.enterAnim);this.mManager.attachFragment(f);break;case 8:this.mManager.setPrimaryNavigationFragment(f);break;case 9:this.mManager.setPrimaryNavigationFragment((Fragment)null);}if (!this.mReorderingAllowed && op.cmd != 1 && f != null) {this.mManager.moveFragmentToExpectedState(f);}}if (!this.mReorderingAllowed) {this.mManager.moveToState(this.mManager.mCurState, true);}}

可以看到最终调用了 FragmentManagerImpl的attach|detach, 由此我们也确认了:

  • ** FragmentTabHost使用了detach|attach 对fragment进行了操作**
    1. 切换走时的生命周期调用顺序为:onPause, onStop, onDestroyView, onDestroy, onDetach
    2. 再次切换回来时生命周期顺序为从onAttach、onCreate、onCreateView、onViewCreated、onResume

这里解释了,重新回到FeedHomeFragment时它的生命周期是正常被调用的。

由于FeedHomeFragment直接包裹了 FeedTabContainerFragment,那FeedTabContainerFragment 的生命周期也是正常的

那么为什么ViewPage里的TabItemFragment会出现 setMenuVisibility 异常呢?

四、ViewPager遇上Fragment

ViewPager有一个方法setOffscreenPageLimit(int limit),该方法设置保存当前页面两侧各limit个页面,已经超出limit的部分会被销毁,该值默认为1。

假设我们有0,1,2,3四个页面,一开始ViewPager的currentItem为0,此时会预加载1页面;滑动到1页面时候,因为0已经加载过了,此时会预加载2页面;当滑动到2时候,就会销毁0,预加载3。其中加载时会调用PagerAdapter的instantiateItem(ViewGroup container, int position)方法,销毁时会调用destroyItem(ViewGroup container, int position, Object object)方法。

我们看下日志记录:

  1. 进入第一个页面
    • 1.jpg
  2. 进入第二个页面
    • 2.jpg
    • 当滑动到第二个fragment的时候,可以看到fragment3开始创建

我们可以看到当Fragment遇到ViewPager时,通过生命周期直接判断 界面是否对用户可见已经不可靠了,业界常用的进行真正判断的函数是借助setMenuVisibility 或者 setUserVisibleHint 进行实现的

    @Overridepublic void setMenuVisibility(boolean menuVisible) {super.setMenuVisibility(menuVisible);if (menuVisible) {//相当于Fragment的onResume} else {//相当于Fragment的onPause}}

我们在原框架结构中是使用这种方式去实现的,经过验证也是真实可靠的,但是为什么在新架构中就失效了呢?

进一步的,我们联想到了可能是Fragment的状态保存和恢复引发的异常

五、Fragment的状态保存和恢复

先上大招,看下整体的时序图分析:

sequence_diagram.jpg

  • 我们知道FragmentTabHost最终是通过FragmentManager的attachFragment|detachFragment来管理的Fragment的(会触发onattach和ondeatch,会触发viewcreate和destory),就是说ShopStreeMainTabFragment的视图会经历销毁和重建。

  • 内部会走到 void moveFragmentToExpectedState(final Fragment f) 对fragment进行操作,其中有几个关键生命周期阶段:

    static final int INVALID_STATE = -1;   // Invalid state used as a null value.static final int INITIALIZING = 0;     // Not yet created.static final int CREATED = 1;          // Created.static final int ACTIVITY_CREATED = 2; // The activity has finished its creation.static final int STOPPED = 3;          // Fully created, not started.static final int STARTED = 4;          // Created and started, not resumed.static final int RESUMED = 5;          // Created started and resumed.
  • 最终触发moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive)
    • fragment的状态在向前move的时候,即变大到resume状态的过程中
    • 向后移动,即隐藏
    void moveToState(Fragment f, int newState, int transit, int transitionStyle,boolean keepActive) {if (f.mState <= newState) {switch (f.mState) {...case Fragment.CREATED:container = mContainer.onFindViewById(f.mContainerId);f.mContainer = container;f.mView = f.performCreateView(f.performGetLayoutInflater(f.mSavedFragmentState), container, f.mSavedFragmentState);if (f.mView != null) {if (container != null) {container.addView(f.mView);}if (f.mHidden) {f.mView.setVisibility(View.GONE);}f.onViewCreated(f.mView, f.mSavedFragmentState);dispatchOnFragmentViewCreated(f, f.mView, f.mSavedFragmentState,false);}f.performActivityCreated(f.mSavedFragmentState);dispatchOnFragmentActivityCreated(f, f.mSavedFragmentState, false);if (f.mView != null) {f.restoreViewState(f.mSavedFragmentState);}f.mSavedFragmentState = null;}}else{switch (f.mState) {...case Fragment.STOPPED:case Fragment.ACTIVITY_CREATED:saveFragmentViewState(f);f.performDestroyView();dispatchOnFragmentViewDestroyed(f, false);} }
  • 那么“进入feed,切到其他tab,再重新切回feed时”,重建过程会依次触发 ShopStreeMainTabFragment的生命周期(ShopStreeMainTabFragment当前状态为1)

    1. performCreateView
    2. onViewCreated
    3. performActivityCreated
    4. dispatchOnFragmentActivityCreated
    5. if (f.mView != null) { f.restoreViewState(f.mSavedFragmentState);}
      • 重建的fragment会触发 f.restoreViewState(f.mSavedFragmentState); 这个state会有值
  • start

  • resume

4.1 Fragment#restoreViewState(f.mSavedFragmentState)的参数

我们先来看restoreViewState中的源码:

  • mInnerView.restoreHierarchyState(this.mSavedViewState); 并回调onViewStateRestored(savedInstanceState);
    final void restoreViewState(Bundle savedInstanceState) {if (mSavedViewState != null) {mView.restoreHierarchyState(mSavedViewState);mSavedViewState = null;}mCalled = false;onViewStateRestored(savedInstanceState);if (!mCalled) {throw new SuperNotCalledException("Fragment " + this+ " did not call through to super.onViewStateRestored()");}}
  • 回到 FragmentManager, 传入的mSavedViewState其实是在 隐藏fragment过程中的saveFragmentViewState(fragment)中保存
    void saveFragmentViewState(Fragment f) {if (f.mView == null) {return;}if (mStateArray == null) {mStateArray = new SparseArray<Parcelable>();} else {mStateArray.clear();}f.mView.saveHierarchyState(mStateArray);if (mStateArray.size() > 0) {f.mSavedViewState = mStateArray;mStateArray = null;}}
  • 对于View的saveHierarchyState
    public void saveHierarchyState(SparseArray<Parcelable> container) {dispatchSaveInstanceState(container);}protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {if (mID != NO_ID && (mViewFlags & SAVE_DISABLED_MASK) == 0) {mPrivateFlags &= ~PFLAG_SAVE_STATE_CALLED;Parcelable state = onSaveInstanceState();if ((mPrivateFlags & PFLAG_SAVE_STATE_CALLED) == 0) {throw new IllegalStateException("Derived class did not call super.onSaveInstanceState()");}if (state != null) {// Log.i("View", "Freezing #" + Integer.toHexString(mID)// + ": " + state);container.put(mID, state);}}}
  • 对于ViewGroup,会遍历子view#onSaveInstanceState();
    @Overrideprotected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {super.dispatchSaveInstanceState(container);final int count = mChildrenCount;final View[] children = mChildren;for (int i = 0; i < count; i++) {View c = children[i];if ((c.mViewFlags & PARENT_SAVE_DISABLED_MASK) != PARENT_SAVE_DISABLED) {c.onSaveInstanceState(container);}}}
  • 那我们来看下ViewPager的onSaveInstanceState
    public Parcelable onSaveInstanceState() {Parcelable superState = super.onSaveInstanceState();ViewPager.SavedState ss = new ViewPager.SavedState(superState);ss.position = this.mCurItem;if (this.mAdapter != null) {ss.adapterState = this.mAdapter.saveState();}return ss;}
  • 调用了adapter的saveState(),对于FragmentStatePagerAdapter就是读取之前fragment.setInitialSavedState(fss);的数组fss, 写入bundle

4.2 遍历嵌套Fragment中

  • ShopStreeMainTabFragment会内部调用
    1. onActivityCreated
    2. mChildFragmentManager.dispatchActivityCreated)
	void performActivityCreated(Bundle savedInstanceState) {if (mChildFragmentManager != null) {mChildFragmentManager.noteStateNotSaved();}mState = ACTIVITY_CREATED;mCalled = false;onActivityCreated(savedInstanceState);if (!mCalled) {throw new SuperNotCalledException("Fragment " + this+ " did not call through to super.onActivityCreated()");}if (mChildFragmentManager != null) {mChildFragmentManager.dispatchActivityCreated();}}
  • 其中dispatchActivityCreated会触发dispatchStateChange
    public void dispatchActivityCreated() {mStateSaved = false;dispatchMoveToState(Fragment.ACTIVITY_CREATED);}private void dispatchMoveToState(int state) {if (mAllowOldReentrantBehavior) {moveToState(state, false);} else {try {mExecutingActions = true;moveToState(state, false);} finally {mExecutingActions = false;}}execPendingActions();}void moveToState(int newState, boolean always) {for (int i = 0; i < numAdded; i++) {Fragment f = mAdded.get(i);moveFragmentToExpectedState(f);if (f.mLoaderManager != null) {loadersRunning |= f.mLoaderManager.hasRunningLoaders();}}}
  • moveToState(nextState, false);依次调用持有的child fragments的对应方法生命周期【feedcontainer\following\explore】(当前状态为1))
    1. 触发feedTabContainerFragment#moveFragmentToExpectedState
      1. (f.mView != null) { f.restoreViewState(f.mSavedFragmentState);}
        1. innerView.restoreHierarchyState(this.mSavedViewState);
          1. FrameLayout# dispatchRestoreInstanceState(container); 遍历子view
            1. View#dispatchRestoreInstanceState(container);
              1. ViewPager#onRestoreInstanceState
              2. mAdapter.restoreState(ss.adapterState, ss.loader);
              3. FragmentStatePagerAdapter
    2. 触发following#moveFragmentToExpectedState
    3. 触发explore#moveFragmentToExpectedState

4.3 FragmentStatePagerAdapter

我们使用了FragmentStatePagerAdapter,它缓存的Fragment是放在mFragments集合中的,当调用destroyItem时候会调用 mFragments.set(position, null)移除对应的实例

	@Overridepublic Object instantiateItem(ViewGroup container, int position) {//mFragments中保存ViewPager缓存的页面对应的Fragment实例,如果在缓存中就直接返回啦if (mFragments.size() > position) {Fragment f = mFragments.get(position);if (f != null) {return f;}}if (mCurTransaction == null) {mCurTransaction = mFragmentManager.beginTransaction();}Fragment fragment = getItem(position);if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);if (mSavedState.size() > position) {//是否之前保存过该页面的状态,保存过就恢复Fragment.SavedState fss = mSavedState.get(position);if (fss != null) {fragment.setInitialSavedState(fss);}}while (mFragments.size() <= position) {mFragments.add(null);}fragment.setMenuVisibility(false);fragment.setUserVisibleHint(false);mFragments.set(position, fragment);mCurTransaction.add(container.getId(), fragment);return fragment;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {Fragment fragment = (Fragment) object;if (mCurTransaction == null) {mCurTransaction = mFragmentManager.beginTransaction();}if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object+ " v=" + ((Fragment)object).getView());while (mSavedState.size() <= position) {mSavedState.add(null);}//保存该Fragment的状态mSavedState.set(position, fragment.isAdded()? mFragmentManager.saveFragmentInstanceState(fragment) : null);//将缓存对应位置置空mFragments.set(position, null);//销毁实例mCurTransaction.remove(fragment);}public Parcelable saveState() {}public void restoreState(Parcelable state, ClassLoader loader) {... f.setMenuVisibility(false);...}

需要注意的是当视图重建时:

  1. ViewPager离屏缓存的Fragment,FragmentManager会帮助我们恢复
  2. 从来没有add到过FragmentManager中实例,我们在getItem放法中创建就好
  3. 曾经add到过Fragment实例,要保留之前的视图状态,依靠的是saveState | restoreState

其中restoreState会强制把 setMenuVisibility 置为false

结论

新框架中TabItemFragment的setMenuVisibility异常是由于:

  1. 新框架使用了 FragmentTabHost
  2. FragmentTabHost使用了 FragmentManager#attachFragment|detachFragment
  3. 终触发moveToState(
  4. 顶级Fragment的performCreateView、onViewCreated、performActivityCreated
  5. 其中performActivityCreated会遍历嵌套的Fragment去调用moveToState函数
    1. moveToState中会触发 mInnerView的restoreState.
      • f.mView会在onDestroyView之前自动保存view树状态,并且在(同一个实例)onActivityCreate之后、onStart之前自动恢复之前保存的状态;
    2. 对于FeedTabContainerFragment,会触发ViewPager的onRestoreInstanceState
    3. 内部调用mAdapter.restoreState(ss.adapterState, ss.loader)
    4. FragmentStatePagerAdapter 会强制setMenuVisibility(false)

问题查明后,我们的解决方案其实也出来了,FragmentStatePagerAdapter恢复视图状态时只强制调用了setMenuVisibility(false),并没有影响setUserVisibleHint,因此将相关的判断改为setUserVisibleHint即可

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
   //界面可见
    } else {//界面不可见 相当于onpause
    }
}

参考文献

  • Android开发:ViewPage详细使用教程
  • 嵌套Fragment的使用及常见错误
  • FragmentStatePagerAdapter restore 的坑
  • fragment的状态保存&恢复过程分析
  • 当Fragment遇上ViewPager
  • 神奇的viewPager预加载功能
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Java如何使用 @ControllerAdvice友好的展示异常

    解决异常的初衷 最近在做一个项目的时候,出现异常的时候会直接暴露给页面,页面是一堆很不友好的代码,客户的第一反应就是“这是什么玩意?”,为了解决这个问题,借鉴并改进,通过创建全局异常处理类,返回一些有提示性的、有图的异常页面。 解决方案 一、主要是通过 @Contr…...

    2024/4/25 3:01:56
  2. Spring-资源加载

    在 Java 中,将不同来源的资源抽象成 URL,通过注册不同的 handler( URLStreamHandler) 来处理不同来源的资源的读取逻辑。 然而 URL没有默认定义相对 Classpath 或 ServletContext 等资源的 handler ,虽然可以注册自己的 URLStreamHandler 来解析特定的 URL 前缀(协议)。但是 …...

    2024/4/23 16:07:45
  3. ACM-2014 青年歌手大奖赛_评委会打分

    青年歌手大奖赛_评委会打分 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 72515 Accepted Submission(s): 36014 Problem Description 青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高…...

    2024/4/23 16:07:44
  4. powderdesigner的简单用法

    powderdesigner的简单用法powerdesigner使用教程创建模型篇用物理模型生成逻辑模型 powerdesigner使用教程 最近在设计数据库,于是就频繁的在接触这个工具,顺便分享下遇到的几个问题。 创建模型篇 我用的是汉化版本的,有需要汉化工具的可自行下载。 下载汉化包 创建模型: 文…...

    2024/4/23 16:07:36
  5. NAT网络地址转换

    私有地址空间允许使用,但仅限自己的局域网本地。不允许直接访问公网 NAT就是将私有地址转换成合法的共有地址在路由器上定义一个池(区间),动态的调地址 ,数据包首先发出后,会在路由配一个ip,建立一个映射条目,能够到另外一个pC,而返回的时候,为56.101+202.101(配置的…...

    2024/4/23 16:07:35
  6. SpringBoot学习---web开发springMvc分析

    Web开发的核心内容主要包括嵌入的 Servlet 容器和 SpringMVC。开发文档:https://docs.spring.io/spring-boot/docs/2.1.14.RELEASE/reference/htmlsingle/#boot-features-spring-mvcWeb开发支持Spring Boot 为 Web 开发提供了 spring-boot-starter-web 启动器作为基本支持,为…...

    2024/4/26 13:12:44
  7. 代理小程序想要不走弯路?这几个小错误需避开

    从2017年微信推出小程序开始,到小程序在多个行业大显身手,越来越多的创业者发现了小程序身上的商机,试图通过代理小程序,做出自己的事业。但小程序代理之路荆棘遍布,陷阱暗布其中。作为深耕小程序开发的SAAS平台,下面和大家分享一些小程序代理常见的问题。市场调研不充分…...

    2024/4/19 13:41:47
  8. bash: sqlplus: command not found

    (1)查看oracle的用户下.bahs_profile配置文件是否完善 (2)查看usr/bin下是否有sqlplus的命令 ,没有就添加个软链接(相当于快捷键)...

    2024/4/16 23:41:44
  9. CSS3 属性样式总结记录(图文)

    CSS3 属性样式总结记录 1 、边框-背景border-image 设置所有边框图像的速记属性。 3border-radius 一个用于设置所有四个边框- *-半径属性的速记属性 3box-shadow 附加一个或多个下拉框的阴影代码1-1 边框 div {border:2px solid #11a1a1a1;padding:10px 40px; background:#ff…...

    2024/4/16 23:41:50
  10. Day01-Markdown语法

    MarkDown 语法 标题 用#加空格表示 三级标题 四级标题 字体 Helllo,World! 双**号 Helllo,World! 单**号 Helllo,World! 三个***号 Helllo,World! 两个~~线 引用java 学习第一天 一个>号分割线 …或者***表示图片![图片名字](…...

    2024/4/16 23:42:08
  11. 模拟电子电路资料分享

    模拟电子电路资料分享 《跟我学模拟电子技术》 今天就来给大家分享的是**《跟我学模拟电子技术》**,个人觉得资料非常不错,步入工作以后对大学里学习的好多专业知识都已忘记的差不多了,手里能有一些随时能翻阅的资料,对于我们回顾专业知识是非常有用的。 下面一起来预览下目…...

    2024/4/15 7:39:25
  12. Tensorflow 神经网络优化:指数衰减学习率、滑动平均、正则化

    1. 指数衰减学习率 tf.train.exponential_decay 先使用较大的学习率快速得到一个较优解,然后随着迭代逐步减小学习率,使模型在训练后期更加稳定。 decayed_learning_rate=learning_rate∗decay_rateglobal_stepdecay_stepsdecayed\_learning\_rate = learning\_rate *decay\_…...

    2024/4/16 23:41:56
  13. ubuntu 18.04安装必备软件

    ubuntu 18.04安装必备软件参考中途遇到问题总结搜狗输入法福昕阅读器 参考 参考链接 中途遇到问题总结 搜狗输入法 安装完成注销账号并重新登录并不能启动搜狗输入法,我是通过重启电脑才实现了启动搜狗输入法 福昕阅读器 官网下载速度很慢,后来是通过网盘下载deb包安装成功的…...

    2024/4/16 23:42:08
  14. #Linux#Linux内核国内镜像下载地址

    http://mirror.bjtu.edu.cn/kernel/linux/kernel/ 苦于官方网站的访问速度,这里记录一下。...

    2024/4/18 7:40:58
  15. Lua位操作实现CRC16算法

    基于Lua5.3function crc16(buf,len)local init = 0xFFFF;local poly = 0xA001;local ret = init;local byte=0;for j=1,len,1 dobyte = string.byte(buf,j);ret=((ret ~ byte) & 0xFFFF);for i=1,8,1 doif((ret & 0x0001)>0) thenret = (ret >> 1);ret = ((re…...

    2024/4/16 23:41:50
  16. 用二分搜索 来检测职工的信息。

    在之前的写的排序算法里面可以用二分搜索的方式进行优化,这篇博客就暂且先介绍一下二分搜索。后续博客会继续对插入排序进行优化二分搜索的算法前提:必须是已经排好序的数组。 算法:当begin == end时候,代表没找到对应的数字下面以一个案例为例,来解决一个小案例: 实现查…...

    2024/4/16 23:41:44
  17. HDU2874(Connections between cities)

    Connections between cities 题目传送门 Problem Description After World War X, a lot of cities have been seriously damaged, and we need to rebuild those cities. However, some materials needed can only be produced in certain places. So we need to transport th…...

    2024/4/16 23:43:02
  18. PyTorch学习笔记(五) ---- 数据并行处理

    转载请注明作者和出处: http://blog.csdn.net/john_bh/ 文章目录1.使用说明2.完整代码总结 1.使用说明 学习如何用 DataParallel 来使用多 GPU。 通过 PyTorch 使用多个 GPU 非常简单。你可以将模型放在一个 GPU: device = torch.device("cuda:0") model.to(device…...

    2024/4/23 16:07:34
  19. 998条接口用例需要跑多久?(二)

    总体架构组成logger.py 顾名思义,配置logger的 import logginglogger = logging.getLogger(Base_logger) logger.setLevel(logging.DEBUG) stream_handler = logging.StreamHandler() stream_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(…...

    2024/4/23 16:07:36
  20. LeetCode笔记(动规*,栈*)

    139. 单词拆分 - medium用动态规划 第一个版本是没有经过优化的,一开始是用回溯发现超时了,之后用动规优化勉强及格 大概的思路是:若想要以s[i]结尾的字符串可以被拆分,则以s[k]结尾的字符串,以及string(s, k, i-k)的字符串均可以被拆分即可//14.07 //14.40 class Solutio…...

    2024/4/23 16:07:33

最新文章

  1. 分布式事务Seata<XA模式、AT模式>解决方案思路(针对多数据源、分库分表、微服务、微服务分库分表4种场景)

    seata的xa的方式解决 保证强一致性 原理说明&#xff1a; 1.启动seata服务器TC&#xff08;控制台7091可以查看&#xff09; 2.启动spring项目 初始化TM RM&#xff0c;实际上TM和RM注册到TC中 3.浏览器访问执行方法&#xff0c;TM向TC请求开启全局事务&#xff0c; 返回一个全…...

    2024/4/26 15:13:09
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. CQT 质押者将从 Wormhole 的空投计划中获益,凸显跨链互操作的重要性

    在向去中心化协议治理迈进的战略进程中&#xff0c;Wormhole 近期公布了分发 6.17 亿枚 W 代币的计划&#xff0c;这一举措旨在激励多个链上社区参与。这些代币将促进在 Wormhole 平台内的治理参与度&#xff0c;并对贡献者进行激励&#xff0c;将近有 400,000 个钱包即将收到部…...

    2024/4/24 11:52:20
  4. 基于JSPM的美食推荐管理系统

    背景 互联网的迅猛扩张彻底转变了全球各类组织的运营模式。自20世纪90年代起&#xff0c;中国各级政府和企事业单位便开始探索运用网络系统来处理管理事务。然而&#xff0c;早期的网络覆盖不广、用户接受度不高、相关网络法规不健全以及技术发展不成熟等因素&#xff0c;都曾…...

    2024/4/26 7:33:08
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/25 11:51:20
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/25 18:39:24
  7. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/25 18:38:39
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

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

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

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

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

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

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

    2024/4/25 18:39:20
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

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

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

    2024/4/25 13:39:44
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

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

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

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

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

    2024/4/25 0:00:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/25 4:19:21
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

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

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

    2024/4/25 18:39:12
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

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

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

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

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

    2024/4/25 13:19:01
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

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

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

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

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

    2022/11/19 21:17:18
  26. 错误使用 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,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
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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