java-不要将Android上下文类放在静态字段中;这是内存泄漏

java-不要将Android上下文类放在静态字段中;这是内存泄漏,第1张

概述我有一个带有BeaconNotificationsManager的服务,我想在我的Activity中访问此BeaconNotificationsManager.目前,我的BeaconNotificationsManager是静态的:publicclassMyServiceextendsService{publicstaticBeaconNotificationsManagerbnm;}我正在这样访问我的活动

我有一个带有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上下文类放在静态字段中;这是内存泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1120860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存