java-不要将Android上下文类放在静态字段中;这是内存泄漏
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-不要将Android上下文类放在静态字段中;这是内存泄漏,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1774字,纯文字阅读大概需要3分钟。
内容图文
![java-不要将Android上下文类放在静态字段中;这是内存泄漏](/upload/InfoBanner/zyjiaocheng/947/f00f4f0fff0448c1a764e2592ebb749e.jpg)
我有一个带有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上下文类放在静态字段中;这是内存泄漏所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。