首先,我很抱歉再次发布此问题,我在Stackoverflow上多次发现此错误。不幸的是,这个错误是由各种原因引发的,阅读答案给了我无解。我将尝试详细描述我的问题并基于其他帖子中的问题/答案。
我在我的应用程序中使用了两个活动。第一项活动是主菜单。按菜单项完成第一个活动(firstActivity.finish())并使用intent启动第二个活动。如果我在第二个活动中完成,那么我完成它(secondActivity.finish())并且我开始第一个有意图的活动(我返回到菜单)。
我真的只需要一个当前启动的活动实例。因此,两个活动都在清单中使用android:launchMode =“singleTask”。
在我的应用程序中,我使用具有名为“Global”的公共类的库,并在应用程序中将此类扩展到AppGlobal。 “Global”类具有静态字段上下文:
class Global {
public static Context context;
}
class AppGlobal extends Global {
}
在每个Activity的create方法中,我用活动实例更新上下文 - “this”。
public class FirstActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
AppGlobal.context = this;
}
}
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
AppGlobal.context = this;
}
}
稍后,在第二个活动中,我检测到“后退”按钮,并且在按键UP事件中我想要显示对话框。
public class Video extends GLSurfaceView {
@Override
public boolean onKeyDown(int keyCode, final KeyEvent event)
{
if (event.getRepeatCount() > 0) {
return true;
}
return EmuManager.onHandleKey(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, final KeyEvent event)
{
if (event.getRepeatCount() > 0) {
return true;
}
return Manager.onHandleKey(keyCode, event);
}
}
class Manager {
public static boolean onHandleKey(int keyCode, final KeyEvent event)
{
if (keyCode == KeyEvent.KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
SettingsDialog d = new SettingsDialog();
d.show();
}
return true;
}
}
SettingDialog需要上下文,我在构造函数中提供它:
public class SettingsDialog extends Dialog {
public SettingsDialog() {
super(AppGlobal.context);
}
}
我从未体验过它,但是在google开发者控制台的日志中,我发现它有时在onHandleKey上的“ d.show()”崩溃:
android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.os.BinderProxy@3d2d4e99无效;是你的活动 运行?在android.view.ViewRootImpl.setView(ViewRootImpl.java:711) 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288) 在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 在android.app.Dialog.show(Dialog.java:312)...
这次崩溃是非常罕见的,但它确实发生了。它仍然会不时出现在日志中。我检查了线程ID,但主线程上显示了对话框。看起来像AppGlobal.context问题。
经历过这样的人?我可以这样存储上下文吗?