A13, 应用端调用【android.view.WindowManager .addView]j接口添加window窗口的堆栈
这个调用并不是ViewRootImpl.java 的 setview方法 那里一路调用过来的,并不是某些博客胡说八道那样胡说八道 说是从ViewRootImpl.java 的 setview 直接过来。我们把相关的aidl 文件删除,直接使用自动生成的java文件替换,并在这些文件中的接口中添加打印。跟踪应用端和服务端的交换流程。
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)
5 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
更多推荐
所有评论(0)