会不会有内存泄漏或存储全局变量的最佳方式?
will there be memory leak or the best way for storing global variables?
对于这个问题,主要关注的是什么是最好的方法。在我的 android 应用程序中,应用程序 class 被子class 主要有两个原因,
1),维护整个应用程序的全局状态,
2),能够在非 activity class 中初始化和使用 SharedPreferences。
代码有点像这样,
public class GlobalApp extends Application {
private static GlobalApp instance;
private Bitmap bitmap;
@Override
public void on create(){
super.on create();
instance = this;
}
public static GlobalApp getInstance() {
return instance;
}
public void setBitmap(Bitmap b) {
this.bitmap = b;
}
}
如您所见,非activity class中访问应用程序上下文,它已被视为静态,而其他字段只是实例变量,我们在其中存储位图,会导致内存泄漏吗?
以上方法是最好的?或者它可以做得比这更好?
请帮忙。
我没有看到任何可能导致内存泄漏的东西。但是,您不需要像那样存储和检索实例,您可以这样做:
GlobalApp app = ((GlobalApp)this.getApplication());
只需确保将应用程序 class 名称添加到清单中。还要记住,没有内存泄漏并不意味着没有内存问题。如果您在该 Application 对象中占用过多内存,您的应用程序可能会因 OutOfMemoryError 而崩溃。根据您的具体需要,您可能需要使用弱引用来避免这种情况。有关使用应用程序的更多信息 class:Using the Android Application class to persist data
对于这个问题,主要关注的是什么是最好的方法。在我的 android 应用程序中,应用程序 class 被子class 主要有两个原因,
1),维护整个应用程序的全局状态,
2),能够在非 activity class 中初始化和使用 SharedPreferences。
代码有点像这样,
public class GlobalApp extends Application {
private static GlobalApp instance;
private Bitmap bitmap;
@Override
public void on create(){
super.on create();
instance = this;
}
public static GlobalApp getInstance() {
return instance;
}
public void setBitmap(Bitmap b) {
this.bitmap = b;
}
}
如您所见,非activity class中访问应用程序上下文,它已被视为静态,而其他字段只是实例变量,我们在其中存储位图,会导致内存泄漏吗? 以上方法是最好的?或者它可以做得比这更好?
请帮忙。
我没有看到任何可能导致内存泄漏的东西。但是,您不需要像那样存储和检索实例,您可以这样做:
GlobalApp app = ((GlobalApp)this.getApplication());
只需确保将应用程序 class 名称添加到清单中。还要记住,没有内存泄漏并不意味着没有内存问题。如果您在该 Application 对象中占用过多内存,您的应用程序可能会因 OutOfMemoryError 而崩溃。根据您的具体需要,您可能需要使用弱引用来避免这种情况。有关使用应用程序的更多信息 class:Using the Android Application class to persist data