I think what you're seeing is a hard-cut (using video editing terms) when one thread is handing over UI ownership to another internal to the device. I would guess that the main Roku menu has a thread that parses and displays the splash while a VM is loading for the channel. Once that VM is ready, it hands over control and you see the first cut which momentarily displays something like a black screen. Then you almost immediately launch scene graph UI, which is another thread separate from the main Brightscript thread for your channel, and there's a second hard cut to your grey (default Scene Graph background color).
I don't think you can avoid these but you can minimize them by use of color backgrounds, preferably black. First, set up a facade using roImageCanvas, but only set a black background color.
sub Main()
facade = CreateObject( "roImageCanvas" )
background = {
Color: "#000000"
}
facade.SetLayer( 0, [ background] )
facade.Show()
showChannelSGScreen()
facade.Hide()
end sub
Next, make sure you have set a background in your Scene so you hide the default grey before the poster becomes ready to display.
<component name = "ZORenderablesExample" extends = "Scene" >
<script type = "text/brightscript" >
<![CDATA[
sub init()
end sub
]]>
</script>
<children>
<Rectangle
id="Background"
width="1280"
height="720"
color="0x000000FF"/>
<Poster
id="mainBackground"
translation="[0, 0]"
...