1.Where is the best place to create the SQLiteOpenHelper instance?
SQLiteOpenHelper helps you to connect with the tables you defined using it.So you can define all of your tables in one SQLiteOpenHelper class.
2.When, and where, do I need to get SQLiteDatabase object by calling dbHelper.getReadableDatabase() (or getWritableDatabase)?
Whenever you want to write data in your defined tables you will need to call getWritableDatabase and for reading from them you will need getReadableDatabase
You can make CRUD(Create, Retrieve, Update, Delete) functions for these purposes.
3.Never do database operations in the main thread!
I'm not sure about this one.
well here's a link for you to start on with SQLite-
http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/