关于Android中Application与Activity Context的异同点

1,首先在Application的context中无法显示AlterDialog等界面元素,而在Activity的context中可以显示。为什么显示dialog需要Activity的的context,可以参考博客:

https://www.jianshu.com/p/628ac6b68c15

用application的context显示dialog会有如下错误:

Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
                           at android.view.ViewRootImpl.setView(ViewRootImpl.java:685)
                           at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
                           at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
                           at android.app.Dialog.show(Dialog.java:316)

2,Application的context可以防止Activity之间跳转,引起的内存泄露问题。Application的context是对该app的一个全局的context,其生命周期为这个app的生命周期。

3,如下错误:

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@c86c79d -- permission denied for window type 2003

原因是在Activity或者application的context中显示mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);类型的dialog造成的。

TYPE_SYSTEM_ALERT类型的dialog可以在service中显示,但是在activity中只能显示TYPE_APPLICATION的dialog。

你可能感兴趣的:(Android)