在哪里把数据库连接在Android应用程序

问题描述:

我在哪里/如何将数据库连接集成到我的Android应用程序中遇到了一些麻烦。在尝试了几种不同的方法后,我决定扩展应用程序类并将其放在那里。据我了解,虽然我需要它是静态的,所以我可以从任何地方访问它,并且我使用了需要应用程序上下文工作的GreenDAO。在哪里把数据库连接在Android应用程序

现在的问题是我已经开始使用Dagger2(我不太明白,但有某种方式让它工作),但它不允许静态注入。下面是MyApp的类:

public class MyApp extends Application { 

@Inject 
public DataSource dataSource; 

private static MyApp instance; 

public MyApp() { 
    instance = this; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 

    // Connect to our datasource 
    if (dataSource == null) { 
     DaggerDataSourceComponent.builder().dataSourceModule(new DataSourceModule(getInstance())).build(); 
    } 
} 

public static MyApp getInstance() { 
    return instance; 
} 

public DataSource getDataSource() { 
    return dataSource; 
} 

}

,这里是我的DataSource类:

public class DataSource { 

public DaoSession daoSession; 
Context context; 
public Database db; 
@Inject 
public DaoMaster.DevOpenHelper helper; 

public DataSource(Context context, DaoMaster.DevOpenHelper helper) { 
    this.context = context; 
    this.helper = helper; 

    db = this.helper.getWritableDb(); 
    daoSession = new DaoMaster(db).newSession(); 
} 

一般来说,这一切工作不错,但只要我开始旋转屏幕,我得到数据库的内存泄漏。我认为这是因为数据库不是静态的,并且在每次轮换时都被重新创建?我无法在我的活动中创建数据库连接,因为我在MVP中理解活动不应该知道这些事情。

任何意见,我应该如何去解决这些内存泄漏,将不胜感激。

UPDATE:

周围玩耍似乎并不在MyApp的数据源的注入实际上是工作,事实证明,它只是在我的相互作用因子类的工作之后(也注入数据源) ,所以我没有意识到它在MyApp类中没有做任何事情。如果可能,我想在MyApp类中进行排序,这样我就可以在全局访问单个连接(除非有更好的方法)。

看起来像我是愚蠢的。在MyApp的我需要添加.inject(这一点),所以

DaggerDataSourceComponent.builder().dataSourceModule(new DataSourceModule(getInstance())).build(); 

成为

DaggerDataSourceComponent.builder().dataSourceModule(new DataSourceModule(getInstance())).build().inject(this); 

我现在有被创建,并在活动被破坏,即使仍然存在一个数据库连接,并且可以像访问所以在整个应用程序:

dataSource = MyApp.getInstance().getDataSource(); 

不知道这是否是好的做法,但它解决了我的问题。如果任何人有更好的想法如何构建这个快乐听到它。