java Android错误:必须从主线程调用recreate()
我遇到了一个Android错误,尽管错误信息非常明显,但我不知道如何使它正常工作
错误消息是:
java.lang.IllegalStateException: Must be called from main thread
at 安卓.app.Activity.recreate(Activity.java:4193)
在我的应用程序中,会向用户发送注销通知(当其令牌过期时)
在旧的Android版本上,我这样做没有问题,但是从SDK 11和更高版本开始,我必须使用recreate()方法。我得到的错误是必须从主线程调用它
我将recreate()语句移动到MainActivity类,当我从IntentService调用该方法时,这不起作用。我仍然会犯同样的错误。消息传递部分工作正常,只是注销消息的处理导致了此错误
以下是一些片段:
在GCMinentService内部。爪哇
if (logout!=null) {
VarControl.ma.logout();
}
内部活动。爪哇
public void logout() {
deleteToken();
closeWebView();
restartApp();
}
public void restartApp() {
if (Build.VERSION.SDK_INT >= 11) {
this.recreate(); // THE ERROR OCCURS HERE
}
else{
//left out this part because its not relevant
}
}
如何从主线程调用recreate(但在接收到意图时必须处理代码)
# 1 楼答案
创建一个两个线程都可以访问的列表。使用synchronized或类似的方法保护它。每当收到意图时,将带有配件代码的Runnable添加到列表中。 在主线程中,定期检查列表是否为非空。如果它不是空的,从列表中弹出第一个Runnable并运行它。这样做直到列表为空
这通常是处理从一个线程向另一个线程传递代码的好方法
# 2 楼答案
如果要在主线程上运行sthg,仍然可以执行以下操作: