android crosswalk闪退,Crosswalk 首次启动闪烁一下的处理办法(Xamarin.Android)
Crosswalk繼承好了Webview之后,出現了一個奇怪現象。首次啟動會短暫的黑屏閃爍。
進過查閱發現Xwalk控件Webview內部使用的是surfaceview。
而安卓surfaceview是特殊的控件,它獨特緩存和處理機制,默認顏色為黑色#000。系統在第一次添加surfaceview時,會重新activity計算布局,從而導致了畫面閃爍。
解決方法:
1、添加一個特別的surfaceview,布局高度和寬度都為0,讓系統初始化一次。
activity:
android:layout_width="0dp"
android:layout_height="0dp" />
代碼:
var surfaceView = new SurfaceView(this);
surfaceView.Layout(0, 0, 0, 0);
this.AddContentView(surfaceView, new ViewGroup.LayoutParams(0, 0));
2、對surfaceview設置默認顏色透明
surfaceView.SetBackgroundColor(Android.Graphics.Color.White);
surfaceView.Holder.SetFormat(Android.Graphics.Format.Transparent);
實際的應用中并不是很理想,調試模式下可能是運行緩慢的原因感覺上效果比較好。
經查看CrossWalk的源代碼,發現在XWalkView中使用了surfaceview。
我們可以在構造完成這個對象后(顯示前設置surfaceview)
-
圖1
以上分為兩步
1、在構造對象是實例化了SurfaceView
2、在postXWalkViewInternalContextConstructor(reflectionInit方法內觸發,應該時需要初始化crosswalk內核時調用)。這是侯進行對象的移除。
圖中的 removeViewAt(0);
在Create XWalkView的時候
var xWalkView = this.findViewById(xxx);
val b = xWalkView.getChildAt(0) as XWalkViewBridge
surfaceView = (b.getChildAt(0) as ViewGroup).getChildAt(0) as SurfaceView
//設置SurfaceView樣式
surfaceView.SetBackgroundColor(Android.Graphics.Color.White);
surfaceView.Holder.SetFormat(Android.Graphics.Format.Translucent);
按照這樣的設置應該會稍好一些。
注意:以上代碼是Xamarin.Android,java的小伙伴請注意做一下轉換。
2019-12-17 23:18 更新
總結
以上是生活随笔為你收集整理的android crosswalk闪退,Crosswalk 首次启动闪烁一下的处理办法(Xamarin.Android)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Crosswalk Project fo
- 下一篇: oracle utl inaddr,Or