http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/database/sqlite/SQLiteDatabase.java
Look for a method called onCorruption.
Nathan <[email protected]> 20 сентября 2013 г. 2:20:05 написал:
On Thursday, September 19, 2013 12:38:19 PM UTC-7, Kostya Vasilyev wrote:
>
> I also get -- rare and very unpleasant -- support emails with this error,
also "database disk image is malformed". >
> Sometimes it's one of the databases used internally by WebView (and yet,
a crash is a crash). >
> Then there are rare cases when the app's database just disappears. >
> The framework has code to detect corrupted databases and delete them.
Most likely it's this code that kicks in. I doubt it was added into the
framework just for my app. >
> SQLite is supposedly the best tested piece of software ever. However,
there was one case when its developer admitted on a mailing list that a
particular version, which happened to be included in a particular Android
release, could corrupt its in-memory buffer, albeit not disk image (if my
memory serves me). So nothing is perfect, all software has bugs, yada yada
yada... >
> I don't even have a theory on what the root cause is: other SQLite bugs,
Android's use of ext4, memory chips going bad... I just look at it as a
given. >
My experience matches yours in that some databases just disappear. I would
like to look at the frameworks code for doing that if you know where I
should look.
The unusual part, as I've seen, is that people are seeing data disappear
and sometimes reappear, within a database where other data may be intact.
It can drive one insane, and I've been able to eliminate user error ( I
think) in many cases.
To sum up, I've got at least three issues.
1. Databases disappear and I can't stop them. 2. Some weird file thing
could be preventing me from getting to the file (do devices unmount and
mount their storage whenever they feel like it?) 3. I could be seeing
conflicts in threads. Shouldn't happen if they are all reader , but . .. 4
(Maybe). Databases above 2 Gigabytes cause undefined behavior in SQLite.
In the thread I cited, Diane Hackborn said (two years ago):
"Yeah it's actually very likely the problem. Android for various reasons
defines off_t to be 32 bit, so if you want to support > 2GB files you need
to use off64_t. That unfortunately makes it easy to have code paths that
break like this."
https://groups.google.com/forum/#!searchin/android-developers/Sqlitediskioexception/android-developers/eYNJrIgabxU/e7sKm9QCfN4J
I don't know where in the framework to look for off_t and where it is used
for SQLite files. Any pointers would help.
I would really like to know for what versions of Android this is a problem,
if at all.
If this 2 gigabyte thing *isn't a problem*, then I want to hold off on
telling my users that it is. Some already find 4 Gigabytes restrictive.
Somebody just told me they are using 8 gigabytes safely on seven different
devices and sharing them among a group of 200 people. Which means he got
around my checks in the code to prevent from going over 4 gigabytes. Maybe
he is just getting lucky, because if the 2 gig problem is real, it seems
like it would fail rather often.
Nathan
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
---
You received this message because you are subscribed to the Google Groups "Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.