hi, Im starting with android and have few questions about database access. 1. Every tutorial I ve read (ie Notepad) that uses sqlite creates and opens connection via SQLiteOpenHelper in onCreate callback. but I really have never seen that the connection is closed (androids throws exceptions that there is a leak as connection is never closed). So I assume that onSaveInstanceState is the best bet to close as onCreate opens the connection. but maybe it should be sooner - something like onResume (for open) and onPause (for close). or maybe those tutorials are too trivial and I should create another layer for accessing data in services, so that data could be shared between activities and wouldn't suffer from activity life cycle.
the only thing is that the exception is thrown after a while - not immediately after destroying activity D/MyMainActivity :( 305): on Pause. D/MyMainActivity :( 305): on Stop. D/MyMainActivity :( 305): on Destroy. D/dalvikvm( 101): GC freed 408 objects / 18416 bytes in 78ms I/ActivityManager( 55): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=info.kami D/MyMainActivity :( 305): on create. D/MyMainActivity :( 305): on Start. D/MyMainActivity :( 305): on Resume. I/ActivityManager( 55): Displayed activity my.app.android/.MainActivity: 664 ms (total 664 ms) I/ActivityManager( 55): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.l D/MyMainActivity :( 305): on Pause. D/MyMainActivity :( 305): on Stop. I/ActivityManager( 55): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=info.kami D/MyMainActivity :( 305): on Restar. D/MyMainActivity :( 305): on Start. D/MyMainActivity :( 305): on Resume. D/dalvikvm( 305): GC freed 5465 objects / 347528 bytes in 95ms E/Database( 305): Leak found E/Database( 305): java.lang.IllegalStateException: mPrograms size 1 E/Database( 305): at android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java: 1668) E/Database( 305): at dalvik.system.NativeStart.run(Native Method) E/Database( 305): Caused by: java.lang.IllegalStateException: /data/ data/my.app.android/databases/data SQLiteDatabase created and never closed E/Database( 305): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java: 1694) E/Database( 305): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java: 738) E/Database( 305): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java: 760) E/Database( 305): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java: 753) E/Database( 305): at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java: 473) E/Database( 305): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java: 193) E/Database( 305): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java: 98) E/Database( 305): at my.app.android.dao.SQLiteTemplate.openToReadWrite(SQLiteTemplate.java: 60) E/Database( 305): at my.app.android.dao.SQLiteCallDao.open(SQLiteCallDao.java:54) E/Database( 305): at my.app.android.MainActivity.getDao(MainActivity.java:102) E/Database( 305): at my.app.android.MainActivity.onCreate(MainActivity.java:53) E/Database( 305): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047) E/Database( 305): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2459) E/Database( 305): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2512) E/Database( 305): at android.app.ActivityThread.access $2200(ActivityThread.java:119) E/Database( 305): at android.app.ActivityThread $H.handleMessage(ActivityThread.java:1863) E/Database( 305): at android.os.Handler.dispatchMessage(Handler.java:99) E/Database( 305): at android.os.Looper.loop(Looper.java:123) E/Database( 305): at android.app.ActivityThread.main(ActivityThread.java:4363) E/Database( 305): at java.lang.reflect.Method.invokeNative(Native Method) E/Database( 305): at java.lang.reflect.Method.invoke(Method.java: 521) E/Database( 305): at com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:860) E/Database( 305): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/Database( 305): at dalvik.system.NativeStart.main(Native Method) E/Database( 305): Leak found 2. Is it really that important (from performance point of view) to use cursor when possible? usually I map each row in cursor to some type and work on a List of that type. 3. how to avoid fetching (even that db is local) all data from some table when my ListView can show only few results at a time. does api support kind of data scrolling - that I missed reading tutorials?? Or should I take care of such situation by myself and fetch-replace data in the view when user drag the scroll bar. 4. I would love to AndroidManifest.xml act as IoC bean descriptor so in code you could annotate field to have your data-service injected. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en