2012-03-23 7 views
2

AndroidエミュレータとGalaxy S2の両方で画像を使用する際に問題があります。私はネイティブに書くのではなく、私はチタンを使用しています。チタンAndroid:画像とメモリ

私のアプリでイメージへの参照をコメントアウトすると、完全に実行されます。私はメモリリークがないかどうかを確認しています。

私はコンソールに入るエラーがある:アプリはiOSの中で完璧に動作します

I/dalvikvm-heap(1867): Clamp target GC heap from 24.689MB to 24.000MB 
E/GraphicsJNI(1867): VM won't let us allocate 1183156 bytes 
D/dalvikvm(1867): GC_FOR_MALLOC freed <1K, 45% free 4499K/8135K, external 16311K/16603K, paused 48ms 
E/TiDrawableReference(1867): (main) [3335,78053] Unable to load bitmap. Not enough memory: bitmap size exceeds VM budget 
E/TiDrawableReference(1867): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

、チタンとAndroidとのより良いハンドルイメージ管理に任意のヒントがありますか?

SDK:1.8.2 ランタイム:V8

+0

これは実際にはリークではなく、大きな画像を表示するのに十分なメモリがないということです。あなたのコードを試してください、しかし、小さな画像を使用して、作品を次にチャンク(アンドロイドSDKのサンプルコードを持っている)に画像をカットする必要があります。しかし、まず小さな画像で試してみてください。 – Bigflow

+0

backgroundImage fullScreenを使用することになったようですが、これを避けるためにスクリーンレイアウトを完全に変更しました。ヒントありがとうございます。 – lookbadgers

答えて

2

これはエミュレータとメモリの問題が原因である...運のYou.Bestを助けるかもしれません。最も簡単な解決策は、tiapp.xmlファイルに以下の行を追加することです。

<property name="ti.android.threadstacksize" type="int">131072</property> 
<property name="ti.android.httpclient.maxbuffersize" type="int">131072</property> 
+0

この問題は、エミュレータで発生するだけではありません。私は、アプリケーションから8MPの写真を作成し、それをサイズ変更しようとすると 'Not enough memory:null'というエラーが出ました。 – antongorodezkiy

0

まあこれでない高解像度ファイルやギャラリーから大きな重み画像やが許可されていないチタンConcerned.Becauseアンドロイドあなたは、圧縮画像を使用する必要がありますexternalStorage.Soまたはサイズ変更された画像。

次のコードは、

 public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (resultCode == RESULT_OK) { 
       if (requestCode == SELECT_PICTURE) { 
        Uri selectedImageUri = data.getData(); 
        selectedImagePath = getPath(selectedImageUri); 
        File f = new File(selectedImagePath); 
        bmImg = decodeFile(f);//BitmapFactory.decodeFile(selectedImagePath, options); 
        takePhotoImg.setImageBitmap(imageManipulation.getResizedBitmap(
          bmImg, 240, 160)); 

        ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
        bmImg.compress(Bitmap.CompressFormat.JPEG, 40, bytes); 

        SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss"); 
        timeStamp = s.format(new Date()); 
        File f1 = new File("/sdcard/mysdfile"+ "test"+timeStamp+".jpg"); 
        try { 
         f1.createNewFile(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        //write the bytes in file 
        FileOutputStream fo; 
        try { 
         fo = new FileOutputStream(f1); 
         try { 
          fo.write(bytes.toByteArray()); 
          System.out.println("#########File is being Written=========!!!!!"); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 
関連する問題