我想在其他需要Context作为输入参数的类中调用方法,但我有3种服务可能性:
- getApplicationContext
- getBaseContext
- getApplication
在ScreenService
extends Service
主要的不同之处是什么。我前几次读到使用getApplicationContext并不好。这是真的吗?
答案 0 :(得分:6)
应用程序上下文附加到应用程序的生命周期中,并且在应用程序的整个生命周期中始终保持相同。因此,如果您正在使用Toast,则可以使用应用程序上下文甚至活动上下文(两者),因为可以从应用程序中的任何位置引发Toast,并且不会附加到窗口。
活动上下文附加到活动的生命周期,如果活动的onDestroy被提升,则可以销毁。
getApplication()
虽然它引用了Application对象但是Application类扩展了Context类,所以它可以用来提供应用程序上下文。
getApplicationContext()
提供应用程序上下文。
getBaseContext()
提供活动背景。
这取决于您使用上下文的目的,
getApplicationContext()
是最受欢迎的方式,因为此上下文一直存在,直到应用程序关闭。
getBaseContext()
上下文可用于窗口小部件和视图。
所以在toast消息中或创建intent时,它们都具有相同的效果,尽管使用getApplicationContext()
是最正确的。 Toast接受任何类型的Context,因为它没有附加任何类型的View。这是一个通知。