有没有办法Context在静态方法中获取当前实例?
我正在寻找那种方式,因为我讨厌每次更改时保存"Context"实例.
在Android应用中,以下方法有什么问题:
public class MyApp extends android.app.Application {
private static MyApp instance;
public MyApp() {
instance = this;
}
public static Context getContext() {
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
并传递它到处(例如SQLiteOpenHelper)需要上下文(当然不泄漏)?
有很多关于这两种背景的帖子......但我仍然没有把它弄得恰到好处
据我所知到目前为止:每个都是它的类的一个实例,这意味着一些程序员建议你this.getApplicationContext()尽可能经常使用,以免"泄漏"任何内存.这是因为另一个this(获取Activity实例上下文)指向Activity每次用户倾斜手机或离开应用程序等时被销毁的内容.显然垃圾收集器(GC)没有捕获,因此使用太多内存..
但是,任何人都可以提出一些非常好的编码示例,它们是正确的使用this(获取当前Activity实例的上下文)并且应用程序上下文将是无用的/错误的吗?
我有一个使用SQL数据库的应用程序.这是由SQLiteOpenHelper类封装的.启动启动画面时,它会在DataProvider类上调用init,该类存储SQLiteOpenHelper的受保护静态实例.init只是调用SQLiteOpenHelper的构造函数:
public class UKMPGData extends SQLiteOpenHelper
{
public UKMPGData(Context context, String databaseName)
{
super(context, databaseName, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
//create table and set up triggers etc
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
onCreate(db);
}
}
public class UKMPGDataProvider
{
protected static UKMPGData uKMpgData;
public static void init(Context aApplicationContext, String aDatabaseName)
{
uKMpgData = new UKMPGData(applicationContext, databaseName);
}
public static void close()
{
uKMpgData.close();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我又有两个扩展UKMPGDataProvider的类,因此可以访问uKMpgData.这些类从数据库中检索和存储特定类型的数据.例如.
public class VehicleDataProvider extends …Run Code Online (Sandbox Code Playgroud)