Копаясь в исходном коде для VideoView и SurfaceView, похоже, что большая часть работы по инициализации Media Player не выполняется до тех пор, пока представление не станет видимым. Я не вижу выхода из этого.
В частности, вот часть SurfaceView.java, которая запускается, когда вид становится видимым:
if (visible) {
// other stuff
if (visibleChanged) {
mIsCreating = true;
for (SurfaceHolder.Callback c : callbacks) {
c.surfaceCreated(mSurfaceHolder);
}
}
// other stuff
}
Это вызывает это в VideoView.java:
.
SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback()
{
// other stuff
public void surfaceCreated(SurfaceHolder holder)
{
mSurfaceHolder = holder;
openVideo();
}
// other stuff
}
И openVideo () - это место, где происходит вся магия.