2016-12-21 42 views
0

我有一项服务,我用它通过WindowManager显示自定义视图,并将其保持在屏幕上一段时间。是否有可能从我的自定义视图中获得我的服务实例?我想这应该是因为我基本上持这种看法的引用我的服务象下面这样:如何从维护服务中获取服务实例?

MyCustomView mCustomView; 
... 

onCreate() { 
    mCustomView = new MyCustomView(this); 
    ... 
} 
+1

您正在将服务的实例传递给构造函数...什么阻止您使用它? – Selvin

回答

0

您的服务充当您的自定义视图的上下文。而View类有一个getContext()方法,显然,它返回前面提供的上下文。您只需要将您的上下文投射到您的服务:

MyService service = (MyService)mCustomView.getContext(); 
+0

呵呵,没想到它可以做到这一点。大。但是,如果我保留这个引用,它会导致一些内存泄漏,或者它可以使内存使用量增加吗?我没有全局声明它,只是在从同一个服务调用的方法中使用它(大声笑我刚刚意识到我可以刚刚通过方法构造函数中的引用)。 –

+0

只要你不在正常的服务生命周期之外存储该上下文(例如作为一个静态变量),你就没有问题 –

+0

但是如果视图被销毁并且服务仍在运行,视图将被泄露。 – Selvin

1

虽然我还没有尝试过,我会假设,getContext()View将返回你Service,假设你Service是您的问题代码片段中的this

+0

嗯,那么fx:公共AppCompatTextView(上下文上下文,AttributeSet attrs,int defStyleAttr){超级(** TintContextWrapper.wrap(context)**,attrs,defStyleAttr);' – Selvin

+0

你有没有睡过? :)有时感觉就像你访问每一个Android相关的SO帖子! –

+0

嘿它是@CommonsWare。哥们你真了不起。 –