Activity 应用端代码:

import android.view.WindowManager;
......
public class XfcActivity2 extends Activity {
......
private WindowManager mWindowManager;
......
    protected void onCreate(Bundle savedInstanceState) {
        mWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
......
    public void onClick(View v) {
        mWindowManager.addView(mWindowViewLayout, mLayoutParams);
    }
}

我们把相关的aidl 文件删除,直接使用自动生成的java文件替换,并在这些文件中的接口中添加打印。跟踪应用端和服务端的交换流程。

IWindowSession.java 使用自动添加日志的工具给每个函数加上一个打印,并把参数都打印出来,如:

android.util.Log.e("IWindowSession.java", " +1421  addToDisplayAsUser -------  start "+" window ="+window+" attrs ="+attrs+" viewVisibility ="+viewVisibility+" layerStackId ="+layerStackId+" userId ="+userId+" requestedVisibilities ="+requestedVisibilities+" outInputChannel ="+outInputChannel+" insetsState ="+insetsState+" activeControls ="+activeControls+" attachedFrame ="+attachedFrame+" sizeCompatScale ="+sizeCompatScale,new Exception()); // 1256

日志显示添加窗口过程IWindowSession.java 的接口共5此被调用,为:

IWindowSession.java:  +1421  addToDisplayAsUser -------  start  window =android.view.
IWindowSession.java:  +2381  setOnBackInvokedCallbackInfo -------  start  window =and
IWindowSession.java:  +1553  relayout -------  start  window =android.view.ViewRootIm
IWindowSession.java:  +1750  getInTouchMode -------  start 
IWindowSession.java:  +1720  finishDrawing -------  start  window =android.view.ViewR

在finishDrawing 被调用后,窗口绘制完成并提交到surfacefliner ,vsync到达之后显示的窗口中。
 

1, addtoDisplayAsUser

 android.view.IWindowSession$Stub$Proxy.addToDisplayAsUser(IWindowSession.java:1257)
 android.view.ViewRootImpl.setView(ViewRootImpl.java:1283)
 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:405)
 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
 com.example.xjni.XfcActivity2$1.onClick(XfcActivity2.java:34)

2,setOnBackInvokedCallbackInfo

android.view.IWindowSession$Stub$Proxy.setOnBackInvokedCallbackInfo(IWindowSession.java:2172)
android.window.WindowOnBackInvokedDispatcher.setTopOnBackInvokedCallback(WindowOnBackInvokedDispatcher.java:196)
android.window.WindowOnBackInvokedDispatcher.registerOnBackInvokedCallbackUnchecked(WindowOnBackInvokedDispatcher.java:131)
android.window.WindowOnBackInvokedDispatcher.registerOnBackInvokedCallback(WindowOnBackInvokedDispatcher.java:97)
android.view.ViewRootImpl.registerCompatOnBackInvokedCallback(ViewRootImpl.java:11325)
android.view.ViewRootImpl.setView(ViewRootImpl.java:1334)
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:405)
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
com.example.xjni.XfcActivity2$1.onClick(XfcActivity2.java:34)

3,relayout

android.view.ViewRootImpl.scheduleTraversals(ViewRootImpl.java:2348)
android.view.ViewRootImpl.invalidate(ViewRootImpl.java:2029)
android.view.ViewRootImpl.onDescendantInvalidated(ViewRootImpl.java:2022)
android.view.ViewGroup.onDescendantInvalidated(ViewGroup.java:6048)
android.view.ViewGroup.onDescendantInvalidated(ViewGroup.java:6048)
android.view.ViewGroup.onDescendantInvalidated(ViewGroup.java:6048)
android.view.ViewGroup.onDescendantInvalidated(ViewGroup.java:6048)
android.view.ViewGroup.invalidateChild(ViewGroup.java:6066)
android.view.View.invalidateInternal(View.java:19372)
android.view.View.invalidate(View.java:19302)
android.view.View.invalidateDrawable(View.java:24048)
android.widget.TextView.invalidateDrawable(TextView.java:8069)
android.graphics.drawable.Drawable.invalidateSelf(Drawable.java:473)
android.graphics.drawable.RippleDrawable.invalidateSelf(RippleDrawable.java:1016)
android.graphics.drawable.RippleDrawable.exitPatternedAnimation(RippleDrawable.java:843)
android.graphics.drawable.RippleDrawable.setRippleActive(RippleDrawable.java:357)
android.graphics.drawable.RippleDrawable.onStateChange(RippleDrawable.java:338)
android.graphics.drawable.Drawable.setState(Drawable.java:836)
android.view.View.drawableStateChanged(View.java:24225)
android.widget.TextView.drawableStateChanged(TextView.java:6160)
android.view.View.refreshDrawableState(View.java:24307)
android.view.View.setPressed(View.java:12994)
android.view.View$UnsetPressedState.run(View.java:29803)
android.os.Handler.handleCallback(Handler.java:942)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loopOnce(Looper.java:201)
android.os.Looper.loop(Looper.java:288)
android.app.ActivityThread.main(ActivityThread.java:7924)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

这个调用并不是ViewRootImpl.java 的 setview方法 那里一路调用过来的,并不是某些博客胡说八道那样胡说八道 说是从ViewRootImpl.java 的 setview 直接过来

4,getInTouchMode

 +1750  getInTouchMode -------  start 
java.lang.Exception
	at android.view.IWindowSession$Stub$Proxy.getInTouchMode(IWindowSession.java:1564)
	at android.view.ViewRootImpl.isInTouchMode(ViewRootImpl.java:1090)
	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3692)
	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2374)
	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9423)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
	at android.view.Choreographer.doCallbacks(Choreographer.java:899)
	at android.view.Choreographer.doFrame(Choreographer.java:832)
	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
	at android.os.Handler.handleCallback(Handler.java:942)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7924)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

finishDrawing

 +1720  finishDrawing -------  start  window =android.view.ViewRootImpl$W@137f311 postDrawTransaction =android.vie
java.lang.Exception
	at android.view.IWindowSession$Stub$Proxy.finishDrawing(IWindowSession.java:1536)
	at android.view.ViewRootImpl.reportDrawFinished(ViewRootImpl.java:4510)
	at android.view.ViewRootImpl.lambda$createSyncIfNeeded$3$android-view-ViewRootImpl(ViewRootImpl.java:3850)
	at android.view.ViewRootImpl$$ExternalSyntheticLambda2.run(Unknown Source:6)
	at android.os.Handler.handleCallback(Handler.java:942)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7924)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
nsact -------  start  code =10 data =android.os.Parcel@b5703e9 reply =android.os.Parcel@7797061 flags =17

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐