我遇到了一个Android错误,虽然错误信息很明显,但我仍然无法弄清楚如何使其正常工作。
错误信息如下:
java.lang.IllegalStateException: Must be called from main thread
at android.app.Activity.recreate(Activity.java:4193)
在我的应用中,当用户的令牌过期时,会发送一个通知以注销该用户。
在旧版的 Android 上,我没有问题这样做,但是从 SDK 11 开始,我必须使用 recreate() 方法。我遇到了错误,要求必须从主线程调用。
我将 recreate() 语句移动到 MainActivity 类中,但是当我从 IntentService 调用该方法时,它不起作用。我仍然遇到同样的错误。消息传递部分运行良好,只有处理注销信息时才出现此错误。
以下是一些片段:
在 GcmIntentService.java 中:
if (logout!=null) {
VarControl.ma.logout();
}
在MainActivity.java内部
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
}
}
如何在主线程中调用重新创建(但代码必须在接收到intent时处理)?