我正在尝试使用Google Play游戏服务在游戏中添加排行榜。
我显示排行榜和提交分数的类从Framework扩展了Screen,因此我创建了Screen扩展BaseGameActivity,这是使用Google Play游戏服务所必需的。
启动应用时出现此错误:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:197)
at android.os.Handler.<init>(Handler.java:111)
at android.app.Activity.<init>(Activity.java:784)
at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java:76)
at com.x.x.BaseGameActivity.<init>(BaseGameActivity.java:65)
at com.x.framework.Screen.<init>(Screen.java:8)
at com.x.x.LoadingScreen.<init>(LoadingScreen.java:11)
at com.x.x.SplashLoadingScreen.update(SplashLoadingScreen.java:19)
at com.x.framework.implementation.AndroidFastRenderView.run(AndroidFastRenderView.java:47)
at java.lang.Thread.run(Thread.java:841)
错误指向的部分代码:
BaseGameActivity.java
...protected BaseGameActivity() {
super();
}...
Screen.java
...public Screen(Game game) {
this.game = game;
}...
LoadingScreen.java
...public LoadingScreen(Game game) {
super(game);
}...
SplashLoadingScreen.java
...game.setScreen(new LoadingScreen(game));...
AndroidFastRenderView.java
...game.getCurrentScreen().update(deltaTime);...
有谁知道如何解决这个问题?
答案 0 :(得分:1)
基于堆栈跟踪,看起来您正在尝试触摸视图并在后台线程中创建Activity。你不应该。尝试在主线程上执行它,你会没事的。
答案 1 :(得分:0)
请勿尝试从后台线程更新用户界面。使用例如runOnUiThread()
将Runnable
发布到在主UI线程上运行的处理程序。
请勿尝试使用LoadingScreen
自己实例化new
等活动类。仅使用Intent
间接实例化活动或更改设计,以便您实例化的类不是Activity
。