游戏加载期间不显示活动布局(从Android API 24开始)



存在执行OpenGL渲染的游戏活动(组件app.OGlSurfaceView(。在加载游戏时,组件textView"正在加载…"显示在黑屏上。

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>

这在带有API 14-23的Android上运行良好。但从API 24版本(Android 7.0(开始,黑屏上的加载消息不会出现,而是继续显示MainActivity.xml的布局(直到游戏加载(。问题:如何在加载游戏时显示消息?我将感谢你的回答。

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

主要活动.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
}
...
}

最新更新