首先,我很抱歉再次发布此问题,我在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问题 .

遇到过像这样的人吗?我可以这样存储上下文吗?