上下文中的内存泄漏

Memory leaks in context

我有一个 class 应用程序,它扩展了应用程序并有一个静态方法 returns 上下文(它是静态的)。

public class  App extends Application {
    private  static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = this.getApplicationContext();
        DBHelper dbHelper = new DBHelper();
        DatabaseManager.initializeInstance(dbHelper);

    }

    public static   Context getContext() {
        return context;
    }
}

现在在构造函数中扩展 SQLiteAssetHelper 的 DBHelper class 中,我有这个:

 public DBHelper() {
        super(App.getContext(), DATABASE_NAME, null, DATABASE_VERSION);

    }

这是 DataBaseManager class:

public class DatabaseManager {
    private Integer mOpenCounter = 0;

    private static DatabaseManager instance;
    private static SQLiteOpenHelper mDatabaseHelper;
    private SQLiteDatabase mDatabase;

    public static synchronized void initializeInstance(SQLiteOpenHelper helper) {
        if (instance == null) {
            instance = new DatabaseManager();
            mDatabaseHelper = helper;
        }
    }

    public static synchronized DatabaseManager getInstance() {
        if (instance == null) {
            throw new IllegalStateException(DatabaseManager.class.getSimpleName() +
                    " is not initialized, call initializeInstance(..) method first.");
        }

        return instance;
    }

    public synchronized SQLiteDatabase openDatabase() {
        mOpenCounter+=1;
        if(mOpenCounter == 1) {
            // Opening new database
            mDatabase = mDatabaseHelper.getWritableDatabase();
        }
        return mDatabase;
    }


}

一切正常,但存在设计问题,因为上下文字段不应该是静态的。如何在保持代码正常工作和字段非静态的同时在 DBHelper 中使用上下文?

您可以像下面这样在 DBHelper 构造函数中传递 ApplicationContext:

public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
}

然后是

DBHelper dbHelper = new DBHelper(getApplicationContext());