Activity游戏加载时不显示布局(从AndroidAPI24开始)

Activity layout is not displayed during game loading (starting with Android API 24)

有游戏activity执行OpenGL渲染(组件app.OGlSurfaceView)。游戏加载时,组件 textView "Loading..." 显示在黑屏上。

GameActivity.xml:

<androidx.constraintlayout.widget.ConstraintLayout 
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".activities.GameActivity">

  <app.OGlSurfaceView
    android:id="@+id/oglView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

  <androidx.constraintlayout.widget.ConstraintLayout
    android:background="@color/black">
    <TextView
      android:id="@+id/load_level_text"
      android:text="Loading..."/>
  </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

这适用于 Android 和 API 14-23。但是从版本API 24 (Android 7.0)开始,黑屏加载信息不再出现,而是继续显示MainActivity.xml的布局(直到游戏加载)。问题:如何在游戏加载过程中出现消息?我将不胜感激。

找到解决方法。从 android 7.0 开始,在 MainActivity 中使用 AsyncTask。

MainActivity.kt:

class MainActivity: AppCompatActivity(view: View) {
    ...
    fun startGameButtonClick() { // start the game
        val layout: ConstraintLayout = findViewById(R.id.loading_layout)
        Loading(layout).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
        ...
        val intent = Intent(this, GameActivity::class.java)
        startActivity(intent)
    }
}

AsyncTask.java:

public class Loading extends AsyncTask<Void, Void, Void> {
    private WeakReference<ConstraintLayout> layout;

    public Loading(ConstraintLayout layout) {
        this.layout = new WeakReference<>(layout);
    }

    @Override
    protected void onPreExecute() {
        layout.get().setVisibility(View.VISIBLE); // show load message
    }
    ...
}