何时onCreate()在非活动类中调用?

时间:2014-08-05 19:27:45

标签: android sqlite

我查阅了有关数据库的不同教程,看到它大致采用相同的方法。 我不明白的是:据我所知,onCreate()只能在活动开始时自动调用(startActivity(new Intent(this))。 但是在下面的示例中,扩展SQLiteOpenHelper的类不是活动,而是包含onCreate()方法,该方法永远不会被手动调用。这是如何工作的,特别是什么时候是它的起点?调用构造函数时会调用它吗?我试着用logcat来查看它,我从来没有收到消息,已经调用了onCreate()。

我有一个这样的课程:

public class MySQLiteHelper extends SQLiteOpenHelper {

    // Database Version
    private static final int DATABASE_VERSION = 1;
    // Database Name
    private static final String DATABASE_NAME = "BookDB";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        // SQL statement to create book table
        String CREATE_BOOK_TABLE = "CREATE TABLE books ( " +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "title TEXT, "+
                "author TEXT )";

        // create books table
        db.execSQL(CREATE_BOOK_TABLE);
    }

一个处理这个类的外部Activity:

public class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        MySQLiteHelper db = new MySQLiteHelper(this);


        // add Books
        db.addBook(new Book("Android Application Development Cookbook", "Wei Meng Lee"));
        db.addBook(new Book("Android Programming: The Big Nerd Ranch Guide", "Bill Phillips and Brian Hardy"));
        db.addBook(new Book("Learn Android App Development", "Wallace Jackson"));

        // get all books
        List<Book> list = db.getAllBooks();
    }
}

2 个答案:

答案 0 :(得分:2)

  

据我所知,onCreate()只能在活动开始时自动调用(startActivity(new Intent(this))。

Android中有多种地方出现onCreate()方法,包括ActivityServiceContentProviderSQLiteOpenHelper

  

这是如何工作的

当且仅当数据库尚不存在时,才会调用onCreate() SQLiteOpenHelper来响应getReadableDatabase()getWriteableDatabase()调用。

答案 1 :(得分:1)

两个类都具有相同名称的功能这一事实并不意味着它们有共同点。 当您第一次请求数据库时(onCreateSQLiteOpenHelper

,会调用getReadeableDatabase()中的getWritableDatabase()