我有一个带有BeaconNotificationsManager的服务,我想在我的Activity中访问此BeaconNotificationsManager.目前,我的BeaconNotificationsManager是静态的:
public class MyService extends Service { public static BeaconNotificationsManager bnm;}
我正在这样访问我的活动中的内容:
if(MyService.bnm != null){ // do stuff}
尽管AndroID告诉我这很糟糕.正确的方法是什么?
解决方法:
关于静态问题:只需说您正在从另一个类引用服务bnm,并且服务已被 *** 作系统破坏,但是静态对象(bnm)仍被某些活动使用,因此它将保留垃圾回收中的服务上下文除非您将活动内的bnm引用设置为null,否则这将泄漏所有应用程序资源
解决方案:
最佳选择是使用BindService这样,您将通过服务对象在服务使用IBinder中获得对服务的更多控制
class MyService..{ public BeaconNotificationsManager bnm; public class LocalBinder extends Binder { LocalService getService() { // Return this instance of LocalService so clIEnts can call public methods return LocalService.this; } } @OverrIDe public IBinder onBind(Intent intent) { return mBinder; } // insIDe service class public boolean getStatus(){ return bnm==null; }}
因此,当您绑定服务时,您将获得绑定器对象,该对象可以进一步为您提供服务对象并使用您的函数检查无效性
1.)创建一个ServiceConnection对象
private ServiceConnection mConnection = new ServiceConnection() { @OverrIDe public voID onServiceConnected(Componentname classname, IBinder service) { // We've bound to LocalService, cast the IBinder and get LocalService instance LocalBinder binder = (LocalBinder) service; mService = binder.getService(); mBound = true; bnmNull= mService.getStatus(); // bnm status }
2.)使用第一步中创建的ServiceConnection对象绑定服务
Intent intent = new Intent(this, MyService.class); bindService(intent, mConnection, Context.BIND_auto_CREATE);
因此,只需在您的类“ getStatus”中有一个函数,然后将其与通过活页夹检索到的对象一起调用即可,以检出link for code example
总结以上是内存溢出为你收集整理的java-不要将Android上下文类放在静态字段中;这是内存泄漏全部内容,希望文章能够帮你解决java-不要将Android上下文类放在静态字段中;这是内存泄漏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)