Posts tagged wp7
Android: Db4o StackOverflowError
Jun 21st
I
‘m using db4o for a persistence store in an Android app since db4o allows FREE usage in Android apps I decide it would be a good fit. Until I ran into the an error I could not get around for a couple of weeks.
Over the last couple of weeks I’ve been dealing with an error from hell, the StackOverflowError. I reworked the object model, I cut down the calls, trimmed up all the fat in the Android app I could find and I couldn’t find what was causing the db40 classes to throw a StackOverflow error.
The error that I’d get back would look like this:
06-12 18:31:06.630: DEBUG/dalvikvm(17018): newInstance failed: no ()
06-12 18:31:06.640: INFO/dalvikvm(17018): Stack overflow, expanding (0x41869200 to 0x41869000)
06-12 18:31:06.640: INFO/dalvikvm(17018): Shrank stack (to 0x41869200, curFrame is 0x41869698)
06-12 18:31:06.640: DEBUG/AndroidRuntime(17018): Shutting down VM
06-12 18:31:06.640: WARN/dalvikvm(17018): threadid=3: thread exiting with uncaught exception (group=0x4001b180)
06-12 18:31:06.690: DEBUG/dalvikvm(17018): GC freed 5995 objects / 562312 bytes in 36ms
06-12 18:31:06.800: DEBUG/dalvikvm(17018): GC freed 3836 objects / 436456 bytes in 79ms
06-12 18:31:06.840: DEBUG/dalvikvm(17018): GC freed 687 objects / 167288 bytes in 33ms
06-12 18:31:06.860: ERROR/AndroidRuntime(17018): Uncaught handler: thread main exiting due to uncaught exception
06-12 18:31:07.020: DEBUG/Gmail(140): MailEngine.sendOrSaveMessage messageId=1338387167469109248 refMessageId=0, conversationId=1338387167469109248
06-12 18:31:07.030: WARN/ActivityManager(76): Activity pause timeout for HistoryRecord{449684b8 com.google.android.gm/.ComposeActivity}
06-12 18:31:07.090: DEBUG/dalvikvm(17018): GC freed 3055 objects / 566504 bytes in 215ms
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): java.lang.StackOverflowError
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.foundation.CircularLongBuffer4.remove(CircularLongBuffer4.java:73)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.caching.LRU2QLongCache.produce(LRU2QLongCache.java:40)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.caching.LRU2QLongCache.produce(LRU2QLongCache.java:14)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.io.CachingBin.getPage(CachingBin.java:153)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.io.CachingBin.readInternal(CachingBin.java:65)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.io.CachingBin.read(CachingBin.java:57)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.io.BinDecorator.read(BinDecorator.java:40)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.io.BlockAwareBin.blockRead(BlockAwareBin.java:90)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.IoAdaptedObjectContainer.readBytes(IoAdaptedObjectContainer.java:210)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.IoAdaptedObjectContainer.readBytes(IoAdaptedObjectContainer.java:201)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.LocalTransaction.readPointer(LocalTransaction.java:387)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.LocalTransaction.getCurrentSlotOfID(LocalTransaction.java:355)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.LocalObjectContainer.readReaderOrWriterByID(LocalObjectContainer.java:437)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.LocalObjectContainer.readReaderByID(LocalObjectContainer.java:415)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.LocalObjectContainer.readReaderByID(LocalObjectContainer.java:419)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.UnmarshallingContext.readBuffer(UnmarshallingContext.java:127)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.UnmarshallingContext.read(UnmarshallingContext.java:40)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.ObjectReference.read(ObjectReference.java:304)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.ObjectReference.read(ObjectReference.java:290)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.ObjectContainerBase.getHardObjectReferenceById(ObjectContainerBase.java:956)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.classMetadataForObjectId(AbstractReadContext.java:85)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.readObject(AbstractReadContext.java:57)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.readAtCurrentSeekPosition(AbstractReadContext.java:46)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.OpenTypeHandler.read(OpenTypeHandler.java:172)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.Handlers4.readValueType(Handlers4.java:313)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.readAtCurrentSeekPosition(AbstractReadContext.java:48)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext$1.run(AbstractReadContext.java:38)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.SlotFormat.doWithSlotIndirection(SlotFormat.java:64)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.readObject(AbstractReadContext.java:36)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.handlers.array.ArrayHandler.readInto(ArrayHandler.java:381)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.handlers.array.ArrayHandler.readElements(ArrayHandler.java:363)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.handlers.array.ArrayHandler.read(ArrayHandler.java:355)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.Handlers4.readValueType(Handlers4.java:313)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.readAtCurrentSeekPosition(AbstractReadContext.java:48)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.OpenTypeHandler.read(OpenTypeHandler.java:172)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.Handlers4.readValueType(Handlers4.java:313)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.readAtCurrentSeekPosition(AbstractReadContext.java:48)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext$1.run(AbstractReadContext.java:38)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.SlotFormat.doWithSlotIndirection(SlotFormat.java:64)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.readObject(AbstractReadContext.java:36)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.marshall.AbstractReadContext.read(AbstractReadContext.java:28)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.FieldMetadata.read(FieldMetadata.java:811)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.FieldMetadata.activate(FieldMetadata.java:646)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.handlers.StandardReferenceTypeHandler$2.processAspect(StandardReferenceTypeHandler.java:93)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.metadata.MarshallingInfoTraverseAspectCommand.processAspect(MarshallingInfoTraverseAspectCommand.java:52)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.metadata.StandardAspectTraversalStrategy.traverseAllAspects(StandardAspectTraversalStrategy.java:24)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.ClassMetadata.traverseAllAspects(ClassMetadata.java:2086)
06-12 18:31:07.100: ERROR/AndroidRuntime(17018): at com.db4o.internal.handlers.StandardReferenceTypeHandler.traverseAllAspects(St
After posting on the forums I was given some advice from Fabio (who looks to be an employee),. He advised to try the TransparentActivation mechanism. I implemented it on my 6 classes and in the configuration of db4o as shown in an example in the previous link.
Magically, the error went away. So, if you get this error, implement the Activatable interface (or IActivatable in .NET).
NOTE: This could be vastly useful when Windows Phone 7 is released if you’re using it for .NET.
New DimeCast: Introduction to WP7
Apr 2nd
DimeCasts.net just published my latest screen-cast titled: “Hello World, I am Win Phone 7″
I cover the basic of a File –> New Windows 7 Phone Application and talk about the emulator for a few minutes.
Enjoy.
Watch the Screen-Cast
Note: I do not cover installing the tools, Peter Henry does a great job of outlining what is necessary on his blog. Thanks Peter!
WP7 Emulator Screen Size Management
Mar 16th
I’ve been developing Android apps for awhile now and at times the emulators are SOOO big that they litterally consume the entire screen real estate and its very difficult to navigate through the enumlator. I was very surprised when I started up the WP7 emulator and started finding out how simple it was to scale the emulator to fit my screen.
All I had to do was select the settings:
Then, select the screen size I wanted:
The screen could scale accordingly now.
Examples
100% (Very Large) – Its so big that it falls off the screen.
50% (Smaller), now it fits nicely, however the UI is hard to read.
This makes life much easier when developing for a high resolution system on a non-high resoution system.
WP7 Boot to VHD
Mar 15th
Tonigt I downloaded the WP7 Developer Tools on a new VHD (Boot to VHD). I’d I’d have to say … its super easy.
File –> New
As soon as the tools are installed you can select File –> New Windows Phone Application, as seen below:
Selecting a new Phone app, I was able to get some XAML on the screen, edit the XAML and get my first Hello WP7 app up in running in under 5 minutes. This very impressive. The emulator started right up, I waited for about 30 seconds while it booted and then my app started. As shown below:
All in all, it was a super simple process.
Boot to VHD
It is important to note that working from a virtualized environment is not supported with the Dev Tools for WP7. However, you can boot to vhd and it will work great (which is 10x better than a VPC in my opinion for regular dev anyway).
So if you havent already, start utilizing Boot to VHD, set a a new one and get started with the new WP7 tools. Its cool/fun stuff.





