2010-02-01 15 views
3

Fondamentalement, je reçois URI de la Galerie de l'image, puis a créé un Bitmap et que vous voulez envoyer à une autre activité pour afficher:gel sur l'envoi de certaines bitmaps aux activités

Uri imageUri = intent.getData(); 
mBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
Intent intent = new Intent(TakePictureActivity.this, PreviewActivity.class); 
intent.putExtra(EXTRA_BITMAP_DATA, mBitmap); 
startActivityForResult(intent, REQUEST_PREVIEW); 

Quand je mets rien à l'intention, la PreviewActivity peut être déclenché normalement. Cependant, quand j'ai mis le bitmap, l'émulateur gelait jusqu'à ce que je l'ai forcé à fermer. Cela m'est arrivé plusieurs fois et j'ai toujours essayé de le faire en envoyant autre chose que l'objet Bitmap.

Mais cette fois je suppose que je ne peux pas. Je ne veux pas modifier l'API en passant l'Uri de l'image car certaines autres activités l'envoient déjà. Celui-ci est un cas particulier.

est ici la sortie de LogCat pendant la congélation:

02-01 14:23:37.808: WARN/IInputConnectionWrapper(219): showStatusIcon on inactive InputConnection 
02-01 14:23:37.899: INFO/ActivityManager(54): Displayed activity com.android.camera/.ImageGallery: 1456 ms (total 1456 ms) 
02-01 14:23:40.009: DEBUG/dalvikvm(54): GC freed 2958 objects/134576 bytes in 98ms 
02-01 14:23:43.085: DEBUG/dalvikvm(219): GC freed 1712 objects/372192 bytes in 80ms 
02-01 14:23:43.085: DEBUG/Camera-JNI(219): release camera 
02-01 14:23:47.489: INFO/WindowManager(54): Setting rotation to 1, animFlags=0 
02-01 14:23:47.489: INFO/WindowManager(54): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=2/1/2 nav=3 orien=2 layout=18} 
02-01 14:23:47.539: INFO/WindowManager(54): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=2/1/2 nav=3 orien=2 layout=18} 
02-01 14:23:47.609: INFO/WindowManager(54): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=2/1/2 nav=3 orien=2 layout=18} 
02-01 14:23:47.657: DEBUG/StatusBar(54): updateResources 
02-01 14:23:47.848: DEBUG/dalvikvm(219): GC freed 200 objects/7936 bytes in 212ms 
02-01 14:23:48.109: INFO/ActivityManager(54): Starting activity: Intent { cmp=com.multinc.somo/.PreviewActivity (has extras) } 
02-01 14:23:48.229: INFO/WindowManager(54): Setting rotation to 0, animFlags=0 
02-01 14:23:48.259: INFO/WindowManager(54): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=2/1/2 nav=3 orien=1 layout=18} 
02-01 14:23:48.259: WARN/WindowManager(54): performLayoutAndPlaceSurfacesLocked called while in layout 
02-01 14:23:48.417: ERROR/JavaBinder(54): !!! FAILED BINDER TRANSACTION !!! 
02-01 14:23:48.417: DEBUG/StatusBar(54): updateResources 
02-01 14:23:48.438: DEBUG/CameraService(31): CameraService::connect E (pid 219, client 0xd228) 
02-01 14:23:48.438: DEBUG/CameraService(31): Client::Client E (pid 219) 
02-01 14:23:48.438: DEBUG/CameraHardwareStub(31): initHeapLocked: preview size=176x144 
02-01 14:23:48.438: ERROR/MediaPlayer(31): Unable to to create media player 
02-01 14:23:48.438: ERROR/CameraService(31): Failed to load CameraService sounds. 
02-01 14:23:48.438: ERROR/MediaPlayer(31): Unable to to create media player 
02-01 14:23:48.438: ERROR/CameraService(31): Failed to load CameraService sounds. 
02-01 14:23:48.461: DEBUG/CameraService(31): Client::Client X (pid 219) 
02-01 14:23:48.461: DEBUG/CameraService(31): CameraService::connect X 
02-01 14:23:48.461: DEBUG/CameraService(31): setPreviewDisplay(0x0) (pid 219) 
02-01 14:23:48.461: DEBUG/CameraService(31): getParameters(picture-format=jpeg;picture-size=213x350;preview-format=yuv422sp;preview-frame-rate=15;preview-size=176x144) 
02-01 14:23:48.461: DEBUG/CameraService(31): setParameters(picture-size=213x350;preview-frame-rate=15;preview-size=390x260;picture-format=jpeg;preview-format=yuv422sp) 
02-01 14:23:48.461: DEBUG/CameraHardwareStub(31): initHeapLocked: preview size=390x260 
02-01 14:23:48.461: DEBUG/CameraService(31): startPreview (pid 219) 
02-01 14:23:48.461: DEBUG/CameraService(31): startCameraMode(0) (pid 219) 
02-01 14:23:48.461: DEBUG/CameraService(31): mSurface is not set yet. 
02-01 14:23:48.461: DEBUG/CameraService(31): startPreviewMode (pid 219) 
02-01 14:23:48.533: DEBUG/Camera-JNI(219): release camera 
02-01 14:23:48.533: DEBUG/CameraService(31): Client::disconnect() E (pid 219 client 0xd228) 
02-01 14:23:48.533: DEBUG/CameraService(31): hardware teardown 
02-01 14:23:48.589: DEBUG/CameraService(31): removeClient (pid 219) done 
02-01 14:23:48.589: DEBUG/CameraService(31): Client::disconnect() X (pid 219) 
02-01 14:23:48.589: DEBUG/CameraService(31): Client::~Client E (pid 31, client 0xd228) 
02-01 14:23:48.589: DEBUG/CameraService(31): Client::disconnect() E (pid 31 client 0xd228) 
02-01 14:23:48.589: DEBUG/CameraService(31): Client::~Client X (pid 31) 
02-01 14:23:53.257: WARN/WindowManager(54): App freeze timeout expired. 
02-01 14:23:53.259: WARN/WindowManager(54): Force clearing freeze: AppWindowToken{438f13f8 token=HistoryRecord{43871530 com.multinc.somo/.PreviewActivity}} 

Cela ne se produit pas avec tous les bitmaps. Ce bitmap particulier provient d'un fichier ~ 300K, mais je ne sais pas si c'est lié à la taille. Est-ce ma faute? Quelqu'un at-il vécu cela?

Merci beaucoup

Répondre

0

Il peut être comprimé 300KB - mais quelle est la résolution. Prendre la largeur, multiplier par la hauteur et multiplier encore par 4.

Vous résolvez le problème faux.

+0

La résolution est de 640 * 480. Quoi qu'il en soit, j'ai profilé la méthode avec une petite image et remarqué que la plupart du temps a été passé sur Bitmap.nativeWriteToParcel, donc je suppose que je devrais le faire de toute façon de toute façon. Alors, quel est le moyen normal d'envoyer des photos entre les activités? Merci beaucoup. – Phil