当前位置: 首页 > news >正文

做博客网站要怎么配置的服做一个代驾app需要多少钱

做博客网站要怎么配置的服,做一个代驾app需要多少钱,网站的模块,电子商务网站建设与管理实训心得窗口布局在onCreate方法中通过setContentView(R.layout.xxx)加载#xff0c;但窗口的显示并不是在wm_on_create_called中, 而是在wm_on_resume_called后#xff0c;也就是说应用onResume时此窗口是不可见的#xff0c;真正可见是当此window窗口的mDrawState变化状态从NO_SUR…      窗口布局在onCreate方法中通过setContentView(R.layout.xxx)加载但窗口的显示并不是在wm_on_create_called中, 而是在wm_on_resume_called后也就是说应用onResume时此窗口是不可见的真正可见是当此window窗口的mDrawState变化状态从NO_SURFACE - DRAW_PENDING - COMMIT_DRAW_PENDING  - HAS_DRAWN- READY_TO_SHOW然后才会将图层置为可见状态这个在后面会讲解到。设置为可见的log如下 05-25 10:56:31.956  1915  1973 V WindowManager: performShow on Window{f4647f5 u0 com.android.settings/com.android.settings.homepage.SettingsHomepageActivity}: mDrawStateREADY_TO_SHOW readyForDisplaytrue startingfalse during animation: policyVistrue parentHiddenfalse tok.visibleRequestedtrue tok.visibletrue animatingfalse tok animatingfalse Callerscom.android.server.wm.WindowState.performShowLocked:4372 com.android.server.wm.WindowStateAnimator.commitFinishDrawingLocked:256 com.android.server.wm.DisplayContent.lambda$new$8:1082 com.android.server.wm.DisplayContent.$r8$lambda$NJwM1ysKPNyOazqyI2QXlp2I4yA:0  05-25 10:56:31.962  1915  1973 V WindowManager: Showing Window{f4647f5 u0 com.android.settings/com.android.settings.homepage.SettingsHomepageActivity}: mDrawStateREADY_TO_SHOW readyForDisplaytrue startingfalse during animation: policyVistrue parentHiddenfalse tok.visibleRequestedtrue tok.visibletrue animatingtrue tok animatingfalse Callerscom.android.server.wm.WindowState.performShowLocked:4387 com.android.server.wm.WindowStateAnimator.commitFinishDrawingLocked:256 com.android.server.wm.DisplayContent.lambda$new$8:1082 com.android.server.wm.DisplayContent.$r8$lambda$NJwM1ysKPNyOazqyI2QXlp2I4yA:0 1. ActivityThread#handleResumeActivity Activity启动时一开始都是置为不可见INVISIBLE的然后才置为可见VISIBLE。ActivityThread.java - OpenGrok cross reference for /frameworks/base/core/java/android/app/ActivityThread.java Overridepublic void handleResumeActivity(ActivityClientRecord r, boolean finalStateRequest,boolean isForward, boolean shouldSendCompatFakeFocus, String reason) {// If we are getting ready to gc after going to the background, well// we are back active so skip it.unscheduleGcIdler();mSomeActivitiesChanged true;// TODO Push resumeArgs into the activity for consideration// skip below steps for double-resume and r.mFinish true case. //这个是activity resume很重要的一步会调用到activity本身的onResume方法后面会做详细解释if (!performResumeActivity(r, finalStateRequest, reason)) {return;} //如果mActivitiesToBeDestroyed集合包含此acitivity,则不往下执行resume操作。 //mActivitiesToBeDestroyed是即将 要销毁的activity集合if (mActivitiesToBeDestroyed.containsKey(r.token)) {// Although the activity is resumed, it is going to be destroyed. So the following// UI operations are unnecessary and also prevents exception because its token may// be gone that window manager cannot recognize it. All necessary cleanup actions// performed below will be done while handling destruction.return;}final Activity a r.activity;if (localLOGV) {Slog.v(TAG, Resume r started activity: a.mStartedActivity , hideForNow: r.hideForNow , finished: a.mFinished);} ... //如果这个window没有被add进window manager并且这个activity没有执行finish操作或者启动其他activity则首先要将此window添加进window manager中。boolean willBeVisible !a.mStartedActivity;if (!willBeVisible) {willBeVisible ActivityClient.getInstance().willActivityBeVisible(a.getActivityToken());} //这里代表这是首次启动这个activity //如果window为空并且不要执行finish并且申请可见则进入如下逻辑if (r.window null !a.mFinished willBeVisible) {r.window r.activity.getWindow();View decor r.window.getDecorView(); //先将根布局设置为不可见decor.setVisibility(View.INVISIBLE); //获取当前window manager对象ViewManager wm a.getWindowManager(); //获取当前window属性WindowManager.LayoutParams l r.window.getAttributes();a.mDecor decor; //将window type类型设置为普通APP类型l.type WindowManager.LayoutParams.TYPE_BASE_APPLICATION;l.softInputMode | forwardBit;if (r.mPreserveWindow) {a.mWindowAdded true;r.mPreserveWindow false;// Normally the ViewRoot sets up callbacks with the Activity// in addView-ViewRootImpl#setView. If we are instead reusing// the decor view we have to notify the view root that the// callbacks may have changed. //获取ViewRootImplViewRootImpl impl decor.getViewRootImpl();if (impl ! null) {impl.notifyChildRebuilt();}}if (a.mVisibleFromClient) {if (!a.mWindowAdded) {a.mWindowAdded true; //如果此window没有被add进window manager过则将此根viewdecoradd进window manager中wm.addView(decor, l);} else {// The activity will get a callback for this {link LayoutParams} change// earlier. However, at that time the decor will not be set (this is set// in this method), so no action will be taken. This call ensures the// callback occurs with the decor set.a.onWindowAttributesChanged(l);}}// If the window has already been added, but during resume// we started another activity, then dont yet make the// window visible.} else if (!willBeVisible) {//如果这个activity已经被add进window manager过了并且在resume期间又起了其他activity那么我们就不会将这个window设置为可见if (localLOGV) Slog.v(TAG, Launch r mStartedActivity set); //设置立即hide的flag为truer.hideForNow true;}// Get rid of anything left hanging around.cleanUpPendingRemoveWindows(r, false /* force */);// The window is now visible if it has been added, we are not// simply finishing, and we are not starting another activity. //这里代表这个activity已经被添加进window manager了并非首次启动if (!r.activity.mFinished willBeVisible r.activity.mDecor ! null !r.hideForNow) {if (localLOGV) Slog.v(TAG, Resuming r with isForward isForward); //获取ViewRootImplViewRootImpl impl r.window.getDecorView().getViewRootImpl(); //获取窗口属性WindowManager.LayoutParams l impl ! null? impl.mWindowAttributes : r.window.getAttributes();if ((l.softInputMode WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION)! forwardBit) {l.softInputMode (l.softInputMode (~WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION))| forwardBit;if (r.activity.mVisibleFromClient) {ViewManager wm a.getWindowManager();View decor r.window.getDecorView();wm.updateViewLayout(decor, l);}}r.activity.mVisibleFromServer true;mNumVisibleActivities;if (r.activity.mVisibleFromClient) {r.activity.makeVisible();} ...} 这块大概的流程图如上所示,在执行handleResumeActivity的时候会先去执行activity的onResume方法然后再将当前的window add进window manager。 这块有个地方拓展下就是窗口类型普通apk启动的窗口类型都是TYPE_BASE_APPLICATION l.type WindowManager.LayoutParams.TYPE_BASE_APPLICATION; Android系统三大窗口类型 Android系统中共有三大窗口类型分别是Application类型 子窗口类型以及系统窗口类型 窗口类型Vlaue含义以下窗口类型为普通APPLICAT窗口类型范围1-99FIRST_APPLICATION_WINDOW 1App的初始值TYPE_BASE_APPLICATION1所有App的基础值TYPE_APPLICATION2普通应用程序窗口TYPE_APPLICATION_STARTING3starting窗口TYPE_DRAWN_APPLICATION4等待绘制完成的窗口LAST_APPLICATION_WINDOW 99App的最大值以下窗口类型为子窗口类型范围1000-1999FIRST_SUB_WINDOW 1000子窗口的初始值TYPE_APPLICATION_PANELFIRST_SUB_WINDOW 应用程序窗口顶部的面板。这些窗口出现在它们的附属窗口的顶部。TYPE_APPLICATION_MEDIAFIRST_SUB_WINDOW 1media子窗口TYPE_APPLICATION_SUB_PANELFIRST_SUB_WINDOW 2子窗口之上的子窗口 TYPE_APPLICATION_ATTACHED _DIALOG FIRST_SUB_WINDOW 3Dialog子窗口 TYPE_APPLICATION_MEDIA _OVERLAY FIRST_SUB_WINDOW 4media子窗口之上的子窗口 TYPE_APPLICATION_ABOVE_ SUB_PANEL FIRST_SUB_WINDOW 5在SUB_PANEL之上的子窗口LAST_SUB_WINDOW 1999子窗口的最大值以下为系统窗口类型范围2000-2999FIRST_SYSTEM_WINDOW2000系统窗口的初始值TYPE_STATUS_BARFIRST_SYSTEM_WINDOW系统状态栏窗口TYPE_SEARCH_BARFIRST_SYSTEM_WINDOW1搜索条窗口TYPE_PHONEFIRST_SYSTEM_WINDOW2通话窗口位于状态栏之上TYPE_SYSTEM_ALERTFIRST_SYSTEM_WINDOW3Alert窗口如电量不足提示显示在APP之上窗口TYPE_KEYGUARDFIRST_SYSTEM_WINDOW4锁屏窗口TYPE_TOASTFIRST_SYSTEM_WINDOW5短暂的提示框窗口TYPE_SYSTEM_OVERLAYFIRST_SYSTEM_WINDOW6系统覆盖窗口不能接受input焦点否则会与屏保发生冲突TYPE_PRIORITY_PHONEFIRST_SYSTEM_WINDOW7电话优先窗口如屏保状态下显示来电窗口TYPE_SYSTEM_DIALOGFIRST_SYSTEM_WINDOW8系统Dialog窗口TYPE_KEYGUARD_DIALOGFIRST_SYSTEM_WINDOW9keyguard Dialog窗口TYPE_SYSTEM_ERRORFIRST_SYSTEM_WINDOW10系统报错窗口TYPE_INPUT_METHODFIRST_SYSTEM_WINDOW11输入法窗口TYPE_INPUT_METHOD_DIALOGFIRST_SYSTEM_WINDOW12输入法Dialog窗口TYPE_WALLPAPERFIRST_SYSTEM_WINDOW13壁纸窗口TYPE_STATUS_BAR_PANELFIRST_SYSTEM_WINDOW14从状态栏滑出的面板在多用户系统中显示在所有用户的窗口上。 TYPE_SECURE_SYSTEM_OVERLAY FIRST_SYSTEM_WINDOW15hideTYPE_DRAGFIRST_SYSTEM_WINDOW16hide拖拽窗口 TYPE_STATUS_BAR_SUB_PANEL FIRST_SYSTEM_WINDOW17hidestatus bar之上的子窗口TYPE_POINTERFIRST_SYSTEM_WINDOW18hideTYPE_NAVIGATION_BARFIRST_SYSTEM_WINDOW19hide导航栏窗口TYPE_VOLUME_OVERLAYFIRST_SYSTEM_WINDOW20hide系统音量条TYPE_BOOT_PROGRESSFIRST_SYSTEM_WINDOW21hide启动时的进度条窗口TYPE_INPUT_CONSUMERFIRST_SYSTEM_WINDOW22hide消耗input事件的窗口TYPE_NAVIGATION_BAR_PANELFIRST_SYSTEM_WINDOW24hideTYPE_DISPLAY_OVERLAYFIRST_SYSTEM_WINDOW26hide用于模拟第二个Display显示屏TYPE_MAGNIFICATION_OVERLAYFIRST_SYSTEM_WINDOW27hideTYPE_PRIVATE_PRESENTATIONFIRST_SYSTEM_WINDOW30TYPE_VOICE_INTERACTIONFIRST_SYSTEM_WINDOW31hideTYPE_ACCESSIBILITY_OVERLAYFIRST_SYSTEM_WINDOW32 TYPE_VOICE_INTERACTION_STARTING FIRST_SYSTEM_WINDOW33hideTYPE_DOCK_DIVIDERFIRST_SYSTEM_WINDOW34hideTYPE_QS_DIALOGFIRST_SYSTEM_WINDOW35hideTYPE_SCREENSHOTFIRST_SYSTEM_WINDOW36hide在锁屏之上该层保留截图动画区域选择和UI。TYPE_PRESENTATIONFIRST_SYSTEM_WINDOW37hide用于在外部显示器上显示的窗口多个屏幕情况下TYPE_APPLICATION_OVERLAYFIRST_SYSTEM_WINDOW38 TYPE_ACCESSIBILITY_MAGNIFICATION _OVERLAY FIRST_SYSTEM_WINDOW39hideTYPE_NOTIFICATION_SHADEFIRST_SYSTEM_WINDOW40hideTYPE_STATUS_BAR_ADDITIONALFIRST_SYSTEM_WINDOW41hideLAST_SYSTEM_WINDOW2999系统窗口的最大值 1.1. ActivityThread#performResumeActivity VisibleForTestingpublic boolean performResumeActivity(ActivityClientRecord r, boolean finalStateRequest,String reason) {if (localLOGV) {Slog.v(TAG, Performing resume of r finished r.activity.mFinished);} //如果activity将要finish则直接return掉不执行resume操作了if (r.activity.mFinished) {return false;} //如果activity已经on_resume了则不继续往下执行returnif (r.getLifecycleState() ON_RESUME) {if (!finalStateRequest) {final RuntimeException e new IllegalStateException(Trying to resume activity which is already resumed); ...}return false;} ... //执行activity的onResume操作r.activity.performResume(r.startsNotResumed, reason);r.state null;r.persistentState null; //设置activity状态为on_resumer.setState(ON_RESUME); //将会打印出event log---wm_on_top_resumed_gained_called相关信息reportTopResumedActivityChanged(r, r.isTopResumedActivity, topWhenResuming);} catch (Exception e) {if (!mInstrumentation.onException(r.activity, e)) {throw new RuntimeException(Unable to resume activity r.intent.getComponent().toShortString() : e.toString(), e);}}return true;} 本小节介绍了activity启动过程中其他的知识下文再继续接着讲怎么添加窗口流程的下面接着1.1中的addView方法。 2. WindowManager#addView wm的获取方法如下可以看到最后是获得到了一个WindowManager对象 private WindowManager mWindowManager;public WindowManager getWindowManager() {return mWindowManager;} 那就来到了WindowManager中的addView方法 查看WindowManager中没有addView方法但是ViewManager中有那我们再看下谁实现了WindowManager呢 public interface WindowManager extends ViewManager { ------------------------------------------------------------- public interface ViewManager {public void addView(View view, ViewGroup.LayoutParams params);public void updateViewLayout(View view, ViewGroup.LayoutParams params);public void removeView(View view); } 可找到是WindowManagerImpl中实现此addView方法,因为WindowManagerImpl继承了WindowManager /** see WindowManager* see WindowManagerGlobal* hide*/ public final class WindowManagerImpl implements WindowManager { ...Overridepublic void addView(NonNull View view, NonNull ViewGroup.LayoutParams params) {applyTokens(params);mGlobal.addView(view, params, mContext.getDisplayNoVerify(), mParentWindow,mContext.getUserId());} 此方法又调用了 WindowManagerGlobal中的addView方法并将view窗口属性要显示的屏幕父window以及user id传入 WindowManagerGlobal.java - OpenGrok cross reference for /frameworks/base/core/java/android/view/WindowManagerGlobal.java public void addView(View view, ViewGroup.LayoutParams params,Display display, Window parentWindow, int userId) {if (view null) {throw new IllegalArgumentException(view must not be null);}if (display null) {throw new IllegalArgumentException(display must not be null);}if (!(params instanceof WindowManager.LayoutParams)) {throw new IllegalArgumentException(Params must be WindowManager.LayoutParams);} //获取窗口布局属性final WindowManager.LayoutParams wparams (WindowManager.LayoutParams) params;if (parentWindow ! null) { //如果父窗口不为空则调整当前父窗口下所有子窗口布局的属性parentWindow.adjustLayoutParamsForSubWindow(wparams);} else {// If theres no parent, then hardware acceleration for this view is// set from the applications hardware acceleration setting.final Context context view.getContext();if (context ! null (context.getApplicationInfo().flags ApplicationInfo.FLAG_HARDWARE_ACCELERATED) ! 0) {wparams.flags | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;}}ViewRootImpl root;View panelParentView null;synchronized (mLock) {// Start watching for system property changes.if (mSystemPropertyUpdater null) {mSystemPropertyUpdater new Runnable() {Override public void run() {synchronized (mLock) {for (int i mRoots.size() - 1; i 0; --i) {mRoots.get(i).loadSystemProperties();}}}};SystemProperties.addChangeCallback(mSystemPropertyUpdater);}int index findViewLocked(view, false);if (index 0) {if (mDyingViews.contains(view)) {// Dont wait for MSG_DIE to make its way through roots queue.mRoots.get(index).doDie();} else {throw new IllegalStateException(View view has already been added to the window manager.);}// The previous removeView() had not completed executing. Now it has.}// If this is a panel window, then find the window it is being// attached to for future reference. //如果是子窗口if (wparams.type WindowManager.LayoutParams.FIRST_SUB_WINDOW wparams.type WindowManager.LayoutParams.LAST_SUB_WINDOW) {final int count mViews.size();for (int i 0; i count; i) {if (mRoots.get(i).mWindow.asBinder() wparams.token) {panelParentView mViews.get(i);}}}IWindowSession windowlessSession null;// If there is a parent set, but we cant find it, it may be coming// from a SurfaceControlViewHost hierarchy. //如果token不为空并且不是子窗口if (wparams.token ! null panelParentView null) {for (int i 0; i mWindowlessRoots.size(); i) {ViewRootImpl maybeParent mWindowlessRoots.get(i);if (maybeParent.getWindowToken() wparams.token) { //获取WindowSessionwindowlessSession maybeParent.getWindowSession();break;}}}if (windowlessSession null) { //如果windowlessSession为空root new ViewRootImpl(view.getContext(), display);} else { //如果windowlessSession不为空则在此处传入windowlessSessionroot new ViewRootImpl(view.getContext(), display,windowlessSession, new WindowlessWindowLayout());} //将窗口布局属性设置进viewview.setLayoutParams(wparams); //将此view添加进mViewsmViews.add(view); //将此root添加进MRootsmRoots.add(root); //将此窗口布局属性添加进mParamsmParams.add(wparams);// do this last because it fires off messages to start doing thingstry { //将view窗口属性和子窗口user id 设置进ViewRootImplroot.setView(view, wparams, panelParentView, userId);} catch (RuntimeException e) {final int viewIndex (index 0) ? index : (mViews.size() - 1);// BadTokenException or InvalidDisplayException, clean up.if (viewIndex 0) {removeViewLocked(viewIndex, true);}throw e;}}}3. ViewRootImpl#setView 然后就从WindowManagerGlobal走到了ViewRootImpl中 http://aospxref.com/android-14.0.0_r2/xref/frameworks/base/core/java/android/view/ViewRootImpl.java#1214 final IWindowSession mWindowSession;public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) {setView(view, attrs, panelParentView, UserHandle.myUserId());}public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView, int userId) {synchronized (this) { //这个mView和上一个方法中的可不一样当窗口detach后这个mView会被置为空if (mView null) {mView view; ...mWindowAttributes.copyFrom(attrs) ...// Schedule the first layout -before- adding to the window// manager, to make sure we do the relayout before receiving// any other events from the system. //首先需要layoutrequestLayout(); ... //这个是很重要的一步res mWindowSession.addToDisplayAsUser(mWindow, mWindowAttributes,getHostVisibility(), mDisplay.getDisplayId(), userId,mInsetsController.getRequestedVisibleTypes(), inputChannel, mTempInsets, mTempControls, attachedFrame, compatScale); ...mPendingAlwaysConsumeSystemBars mAttachInfo.mAlwaysConsumeSystemBars;mInsetsController.onStateChanged(mTempInsets);mInsetsController.onControlsChanged(mTempControls.get());final InsetsState state mInsetsController.getState();final Rect displayCutoutSafe mTempRect;state.getDisplayCutoutSafe(displayCutoutSafe);final WindowConfiguration winConfig getCompatWindowConfiguration();mWindowLayout.computeFrames(mWindowAttributes, state,displayCutoutSafe, winConfig.getBounds(), winConfig.getWindowingMode(),UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH,mInsetsController.getRequestedVisibleTypes(), 1f /* compactScale */, mTmpFrames);setFrame(mTmpFrames.frame, true /* withinRelayout */); ...} 接着往下走就会讲到WindowSession.addToDisplayAsUser方法 4. WindowSession.addToDisplayAsUser 这里是涉及到AIDL通信因为mWindowSession是final IWindowSession mWindowSession; 用到的AIDL文件如下 frameworks/base/core/java/android/view/IWindowSession.aidl http://aospxref.com/android-14.0.0_r2/xref/frameworks/base/core/java/android/view/IWindowSession.aidl Session.java - OpenGrok cross reference for /frameworks/base/services/core/java/com/android/server/wm/Session.java  Overridepublic int addToDisplayAsUser(IWindow window, WindowManager.LayoutParams attrs,int viewVisibility, int displayId, int userId, InsetsType int requestedVisibleTypes,InputChannel outInputChannel, InsetsState outInsetsState,InsetsSourceControl.Array outActiveControls, Rect outAttachedFrame,float[] outSizeCompatScale) { //调用WMS的addWindow流程return mService.addWindow(this, window, attrs, viewVisibility, displayId, userId,requestedVisibleTypes, outInputChannel, outInsetsState, outActiveControls,outAttachedFrame, outSizeCompatScale);} 下面是一个关于以上流程的setting主页面启动流程 05-25 12:58:21.791 1909 2175 I wm_task_created: 441 05-25 12:58:21.795 1909 2175 I wm_task_moved: [441,441,0,1,2] 05-25 12:58:21.795 1909 2175 I wm_task_to_front: [0,441,0] 05-25 12:58:21.795 1909 2175 I wm_create_task: [0,441,441,0] 05-25 12:58:21.795 1909 2175 I wm_create_activity: [0,232997572,441,com.android.settings/.homepage.SettingsHomepageActivity,android.settings.SETTINGS,NULL,NULL,335544320] 05-25 12:58:21.795 1909 2175 I wm_task_moved: [441,441,0,1,2] 05-25 12:58:22.265 1909 3494 I wm_restart_activity: [0,232997572,441,com.android.settings/.homepage.SettingsHomepageActivity] 05-25 12:58:22.267 1909 3494 I wm_set_resumed_activity: [0,com.android.settings/.homepage.SettingsHomepageActivity,minimalResumeActivityLocked - onActivityStateChanged] 05-25 12:58:22.363 2518 2518 I wm_on_create_called: [232997572,com.android.settings.homepage.SettingsHomepageActivity,performCreate,66] 05-25 12:58:22.457 2518 2518 I wm_on_start_called: [232997572,com.android.settings.homepage.SettingsHomepageActivity,handleStartActivity,92] 05-25 12:58:22.460 2518 2518 V ActivityThread: Performing resume of ActivityRecord{a4a98fc tokenandroid.os.BinderProxyc7155ef {com.android.settings/com.android.settings.homepage.SettingsHomepageActivity}} finishedfalse 05-25 12:58:22.460 2518 2518 I wm_on_resume_called: [232997572,com.android.settings.homepage.SettingsHomepageActivity,RESUME_ACTIVITY,0] 05-25 12:58:22.525 2518 2518 V ActivityThread: Resume ActivityRecord{a4a98fc tokenandroid.os.BinderProxyc7155ef {com.android.settings/com.android.settings.homepage.SettingsHomepageActivity}} started activity: false, hideForNow: false, finished: false 05-25 12:58:22.545 1909 2175 V WindowManager: Attaching Window{a90e6ab u0 com.android.settings/com.android.settings.homepage.SettingsHomepageActivity} tokenActivityRecord{de342c4 u0 com.android.settings/.homepage.SettingsHomepageActivity t441} 05-25 12:58:22.552 2518 2518 V ActivityThread: Resuming ActivityRecord{a4a98fc tokenandroid.os.BinderProxyc7155ef {com.android.settings/com.android.settings.homepage.SettingsHomepageActivity}} with isForwardtrue 05-25 12:58:22.552 2518 2518 V ActivityThread: Scheduling idle handler for ActivityRecord{a4a98fc tokenandroid.os.BinderProxyc7155ef {com.android.settings/com.android.settings.homepage.SettingsHomepageActivity}} 05-25 12:58:22.553 2518 2518 I wm_on_top_resumed_gained_called: [232997572,com.android.settings.homepage.SettingsHomepageActivity,topStateChangedWhenResumed] 05-25 12:58:22.769 1909 1971 I wm_activity_launch_time: [0,232997572,com.android.settings/.homepage.SettingsHomepageActivity,970]6. WindowManagerService#addWindow 这里就到了Server端以上都是Client端。 WMS的流程较复杂后面再出关于Server端的文章。
文章转载自:
http://www.morning.fydsr.cn.gov.cn.fydsr.cn
http://www.morning.nfqyk.cn.gov.cn.nfqyk.cn
http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn
http://www.morning.zylrk.cn.gov.cn.zylrk.cn
http://www.morning.mrxqd.cn.gov.cn.mrxqd.cn
http://www.morning.ydfr.cn.gov.cn.ydfr.cn
http://www.morning.monstercide.com.gov.cn.monstercide.com
http://www.morning.zzfqn.cn.gov.cn.zzfqn.cn
http://www.morning.rtbx.cn.gov.cn.rtbx.cn
http://www.morning.wxgd.cn.gov.cn.wxgd.cn
http://www.morning.lrybz.cn.gov.cn.lrybz.cn
http://www.morning.lpcpb.cn.gov.cn.lpcpb.cn
http://www.morning.zntf.cn.gov.cn.zntf.cn
http://www.morning.xqknl.cn.gov.cn.xqknl.cn
http://www.morning.kpgms.cn.gov.cn.kpgms.cn
http://www.morning.mghgl.cn.gov.cn.mghgl.cn
http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn
http://www.morning.cknrs.cn.gov.cn.cknrs.cn
http://www.morning.lwsct.cn.gov.cn.lwsct.cn
http://www.morning.gjtdp.cn.gov.cn.gjtdp.cn
http://www.morning.jfmyt.cn.gov.cn.jfmyt.cn
http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn
http://www.morning.lqznq.cn.gov.cn.lqznq.cn
http://www.morning.dmnqh.cn.gov.cn.dmnqh.cn
http://www.morning.dhxnr.cn.gov.cn.dhxnr.cn
http://www.morning.rjljb.cn.gov.cn.rjljb.cn
http://www.morning.xwbwm.cn.gov.cn.xwbwm.cn
http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn
http://www.morning.pqkrh.cn.gov.cn.pqkrh.cn
http://www.morning.snjpj.cn.gov.cn.snjpj.cn
http://www.morning.fpryg.cn.gov.cn.fpryg.cn
http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn
http://www.morning.rbrd.cn.gov.cn.rbrd.cn
http://www.morning.crxdn.cn.gov.cn.crxdn.cn
http://www.morning.lrgfd.cn.gov.cn.lrgfd.cn
http://www.morning.wwklf.cn.gov.cn.wwklf.cn
http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn
http://www.morning.rkfh.cn.gov.cn.rkfh.cn
http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn
http://www.morning.rqpgk.cn.gov.cn.rqpgk.cn
http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn
http://www.morning.khlxd.cn.gov.cn.khlxd.cn
http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn
http://www.morning.phwmj.cn.gov.cn.phwmj.cn
http://www.morning.mnwsy.cn.gov.cn.mnwsy.cn
http://www.morning.mlmwl.cn.gov.cn.mlmwl.cn
http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.ptmch.com.gov.cn.ptmch.com
http://www.morning.smj79.cn.gov.cn.smj79.cn
http://www.morning.kszkm.cn.gov.cn.kszkm.cn
http://www.morning.qrsm.cn.gov.cn.qrsm.cn
http://www.morning.xxrwp.cn.gov.cn.xxrwp.cn
http://www.morning.rlzxr.cn.gov.cn.rlzxr.cn
http://www.morning.bmhc.cn.gov.cn.bmhc.cn
http://www.morning.rykn.cn.gov.cn.rykn.cn
http://www.morning.mwns.cn.gov.cn.mwns.cn
http://www.morning.hwnqg.cn.gov.cn.hwnqg.cn
http://www.morning.znqfc.cn.gov.cn.znqfc.cn
http://www.morning.hrtfz.cn.gov.cn.hrtfz.cn
http://www.morning.mftzm.cn.gov.cn.mftzm.cn
http://www.morning.gstmn.cn.gov.cn.gstmn.cn
http://www.morning.xqspn.cn.gov.cn.xqspn.cn
http://www.morning.hmlpn.cn.gov.cn.hmlpn.cn
http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn
http://www.morning.gwkwt.cn.gov.cn.gwkwt.cn
http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn
http://www.morning.jghty.cn.gov.cn.jghty.cn
http://www.morning.yntsr.cn.gov.cn.yntsr.cn
http://www.morning.hchrb.cn.gov.cn.hchrb.cn
http://www.morning.lphtm.cn.gov.cn.lphtm.cn
http://www.morning.lchtb.cn.gov.cn.lchtb.cn
http://www.morning.mrfgy.cn.gov.cn.mrfgy.cn
http://www.morning.znnsk.cn.gov.cn.znnsk.cn
http://www.morning.fflnw.cn.gov.cn.fflnw.cn
http://www.morning.xnnpy.cn.gov.cn.xnnpy.cn
http://www.morning.kjyfq.cn.gov.cn.kjyfq.cn
http://www.morning.btsls.cn.gov.cn.btsls.cn
http://www.morning.jjmrx.cn.gov.cn.jjmrx.cn
http://www.morning.rkbly.cn.gov.cn.rkbly.cn
http://www.tj-hxxt.cn/news/240516.html

相关文章:

  • 网站做302跳转的意义网站建设维护工作
  • 网站建设的营业执照seo网络推广技术
  • 保之友微网站怎么建网页加速器怎么用
  • wordpress系列怎么做网站维护优化
  • 聊天室网站模板建设一个手机网站首页
  • 数据线 东莞网站建设如何设计商务网站
  • 保定网站设计推荐中国交通建设集团有限公司是央企
  • 做网站前的准备什么软件门面装修设计方案
  • 网站建设这门课wordpress文章more插件
  • 静态网站开发一体化课程dw网页制作模板素材
  • 山东省建设管理中心网站首页哪家公司建网站最好
  • 遵义市营商环境建设局网站网站开发需要配置哪些人员
  • 网站建设与管理的策划书wordpress最新功能
  • 邦派巴洛特网站是谁做的呀jquery做的网站
  • 个人网站制作模板响应式佛山品牌策划设计
  • 深圳网站设计成功柚米网站站内内链建设
  • 外贸网站怎么做推广icp备案信息查询
  • ps做网站连接绵阳网站建设维护
  • 网站建设xyhlrj污水管网建设
  • 做区块链在哪个网站绍兴seo排名外包
  • 建设网站怎样提要求怎么做网站给国外看见
  • 网站建设立项申请广州站西手表
  • 网站每年空间域名费用及维护费wordpress 注册功能
  • 品牌网站开发天健oa管理系统
  • 如何建设网站导航内链接视频拍摄公司推荐
  • 如何写好网站建设方案做图表的网站推荐
  • 菏泽做网站淘宝导购网站模版
  • 合川网站制作网站建设源码修改
  • 做设计排版除了昵图网还有什么网站wiki能用wordpress
  • 上海专业网站营销全球排名前十网站