"The contents of the Canvas are never saved if it is hidden and then is made visible again. Thus, shortly after showNotify() is called, paint() will always be called with a Graphics object whose clip region specifies the entire displayable area of the Canvas."

Couldn't you subclass Canvas(), and in your pass-thru of the paint() method to the parent take the Graphics 'g' object and save that as a JPG file?

(note: not a programmer but a systems guy, so I can read APIs but not bother coding them )