首先,我很抱歉再次发布此问题,我在Stackoverflow上多次发现此错误 . 不幸的是,这个错误是由各种原因引发的,阅读答案给了我无解 . 我将尝试详细描述我的问题,并根据其他帖子中的问题/答案 .
我在我的应用程序中使用了两个Activity . 第一项活动是主菜单 . 按菜单项完成第一个活动(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上的android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288)的android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)上的android.view.ViewRootImpl.setView(ViewRootImpl.java:711) . Dialog.show(Dialog.java:312)......
这种崩溃非常罕见,但它确实发生了 . 它仍然会不时出现在日志中 . 我检查了线程ID,但主线程上显示了对话框 . 看起来像AppGlobal.context问题 .
遇到过像这样的人吗?我可以这样存储上下文吗?