Правильно ли я создаю и закрываю подключения к БД в GreenDao 3

510
04 января 2017, 01:43

Создал класс-Singleton:

public class DataManager
{
    private static DataManager mDataManager;
    private static Database mDatabase;
    private static DaoSession mDaoSession;
    private static List<Task> mTasks;
    public static void initInstance(Context context)
    {
        if (mDataManager == null)
        {
            mDataManager = new DataManager();
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "TASKS");
            mDatabase = helper.getWritableDb();
            mDaoSession = new DaoMaster(mDatabase).newSession();
            mTasks = mDaoSession.queryBuilder(Task.class).build().list();
        }
    }
    public static DataManager getInstance()
    {
        return mDataManager;
    }
    public Database getDatabase()
    {
        return mDatabase;
    }
    public DaoSession getDaoSession()
    {
        return mDaoSession;
    }
    public List<Task> getTaskList()
    {
        return mTasks;
    }
    public void updateTaskList()
    {
        mTasks = mDaoSession.queryBuilder(Task.class).build().list();
    }
}

В MyApplication проинициализировал его:

public class MyApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        DataManager.initInstance(getApplicationContext());
    }
}

MyApplication, соответственно, указан в манифесте:

<application
        android:name=".MyApplication"
...

В MainActivity в onCreate вытягиваю список и помещаю его в RecyclerView:

public class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        List<Task> tasks = DataManager.getInstance().getTasksList();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvMainRecycler);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        MainRecyclerViewAdapter mainRecyclerViewAdapter = new MainRecyclerViewAdapter(tasks);
        recyclerView.setAdapter(mainRecyclerViewAdapter);
    }
...

В onDestroy очищаю сессию и закрываю БД:

@Override
protected void onDestroy()
{
    DataManager.getInstance().getDaoSession().clear();
    DataManager.getInstance().getDatabase().close();
    super.onDestroy();
}

В другой активити навесил на кнопку:

    btnInsert.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            TaskDao taskDao = DataManager.getInstance().getDaoSession().getTaskDao();
            Task task = new Task(/*здесь некоторые параметры*/);
            taskDao.insertOrReplaceInTx(task);
            taskDao.detachAll();
        }
    });

Все, что меня интересует - это:

  1. taskDao.detachAll(); - нужно ли?

  2. DataManager.getInstance().getDaoSession().clear(); - соответственно, нужно ли очищать сессию?

  3. DataManager.getInstance().getDatabase().close(); - и закрывать БД?

И правильно ли я их вызвал ДО super.onDestroy();?

P.S. В манифесте выставил только портретную ориентацию, поэтому активити не пересоздается при смене ориентации, может вообще все это зря с синглтоном?

READ ALSO
Индикатор слайда bxslider [требует правки]

Индикатор слайда bxslider [требует правки]

Как переместить индикаторы текущего слайдера на само изображение, а не под ним? Пример на скриншоте:

460
Как убрать bootstrap&#39;овский margin?

Как убрать bootstrap'овский margin?

После добавления класса "row" объекты попадают в нужную мне строку но приобретают ненужное мне свойство

572
Как убрать отступы между кнопками?

Как убрать отступы между кнопками?

Подскажите, как убрать отступы между кнопкамиЭти отступы нигде не фиксируются

458
Автоперенос строк

Автоперенос строк

Скачал скрипт jodit editor (http://xdsoftnet/jodit/)

470