是否有可靠的方法从服务中获取Context ?
我想为ACTION_PHONE_STATE_CHANGED注册一个广播接收器,但我不需要我的应用程序总是得到这个信息,所以我没有把它放在Manifest中。
然而,当我需要这些信息时,我不能让GC杀死广播接收器,所以我在服务中注册了广播接收器。
因此,我需要一个Context来调用registerReceiver()。 当我不再需要ACTION_PHONE_STATE_CHANGED时,我注销了它。
任何建议吗?
是否有可靠的方法从服务中获取Context ?
我想为ACTION_PHONE_STATE_CHANGED注册一个广播接收器,但我不需要我的应用程序总是得到这个信息,所以我没有把它放在Manifest中。
然而,当我需要这些信息时,我不能让GC杀死广播接收器,所以我在服务中注册了广播接收器。
因此,我需要一个Context来调用registerReceiver()。 当我不再需要ACTION_PHONE_STATE_CHANGED时,我注销了它。
任何建议吗?
当前回答
以防有人得到NullPointerException,你需要得到onCreate()内部的上下文。
服务是一个Context,所以这样做:
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
}
注意:
阅读:“不要把Android上下文类放在静态字段;这是内存泄漏(也破坏了即时运行)”您知道什么是上下文类吗?Activity就是其中之一,您不应该将Activity存储为静态字段(否则会泄漏内存)。但是,您可以将Context(只要它是应用程序上下文)存储为静态字段,因为它比任何东西都存在。
其他回答
Service扩展了ContextWrapper,而ContextWrapper扩展了Context。因此,服务是一个上下文。 在服务中使用'this'关键字。
服务是一个上下文
以防有人得到NullPointerException,你需要得到onCreate()内部的上下文。
服务是一个Context,所以这样做:
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
}
注意:
阅读:“不要把Android上下文类放在静态字段;这是内存泄漏(也破坏了即时运行)”您知道什么是上下文类吗?Activity就是其中之一,您不应该将Activity存储为静态字段(否则会泄漏内存)。但是,您可以将Context(只要它是应用程序上下文)存储为静态字段,因为它比任何东西都存在。
如果需要服务上下文,则使用此关键字。如果你想要活动上下文,你可以通过创建静态变量来访问它
public static Context context;
在活动onCreate()
context=this;
现在您可以在服务内部访问该上下文
因为Service是一个Context,变量Context必须是这样的:
DataBaseManager dbm = Utils.getDataManager(this);