2012-04-17 2 views
0

내가있는 내가 다음 코드를 사용하여 GIF 이미지를 사용하고, 안드로이드 응용 프로그램을 개발하고표면보기에서 Gif 이미지를 사용 하시겠습니까?

private static byte[] streamToBytes(InputStream is) { 
    ByteArrayOutputStream os = new ByteArrayOutputStream(1024); 
    byte[] buffer = new byte[1024]; 
    int len; 
    try { 
     while ((len = is.read(buffer)) >= 0) { 
      os.write(buffer, 0, len); 
     } 
    } catch (java.io.IOException e) { 
    } 
    return os.toByteArray(); 
} 

// 클래스

is = this.context.getResources().openRawResource(R.drawable.fondo_juego_nexus); 

      if (DECODE_STREAM) { 
        System.out.println("in if DECODE_STREAM"); 
       mMovie = Movie.decodeStream(is); 
      } 

      else { 
       byte[] array = streamToBytes(is); 
       System.out.println("in else DECODE_STREAM"); 
       mMovie = Movie.decodeByteArray(array, 0, array.length); 
      } 



// In On Draw 

    long now = android.os.SystemClock.uptimeMillis(); 

     if (mMovieStart == 0) { // first time 
      mMovieStart = now; 
     } 
     if (mMovie != null) { 
      System.out.println("in if (mMovie != null) " + mMovie.duration()); 
      int dur = mMovie.duration(); 
      if (dur == 0) 
      { 
       dur = 1000; 
       System.out.println("in if movie if"); 
      } 
      System.out.println("duration is "+ dur); 
      int relTime = (int)((now - mMovieStart) % dur); 
      mMovie.setTime(relTime); 
      System.out.println("in if displaying syd"); 
      mMovie.draw(canvas,120,100); 

     } 

과 같은 활동에서 ontouch 내가 출구로 생성자에서 내가 위의 방법으로 활동을 종료하고, 이전 작업을 다시 가서 활동 어에 다시 올

else if(_y<=60 && _x<=60) 
     { 


      sp.play(mySound1, volume, volume, 0, 0, 1); 
      sp.release(); 
      playr.stop(); 
      tme.cancel(); 
      act.finish(); 

} 

니어 나는 장치 은하계 S2, 2.3.3에 나타나지 않지만 2.2의 동일한 크기의 에뮬레이터에서 GIF 이미지를 사용하고있다.

이 접근법에 어떤 문제가 있거나 어떤 방식으로 표시 할 수 있습니까? GIF 이미지는

나는 내 문제에 대한 해결책을 가지고이 오류

답변

1

을 제거하기 위해 무엇을해야하는지, 내가 얼마나 잘 모르는, 하지만 이전에 내가 생성자에서이 코드를 사용하여 한 나를 위해 일한

if (DECODE_STREAM) { 
       mMovie = Movie.decodeStream(is); 
      } else { 
       byte[] array = streamToBytes(is); 
       mMovie = Movie.decodeByteArray(array, 0, array.length); 
      } 

     } 

처음에는 그랬지만 내 생각에 두 번째로는 암시 적으로 실행중인 가비지 수집기가 너무 많아서 이 실행되고 내 이미지 초기화가 다시 실행 중이므로 의 성능이 좋지 않습니다. 게임, 그리고 난 그냥

System.gc(); 

에 수동으로 가비지 컬렉터 추가 된이 후 모든 이미지를 초기화이었다 무슨 짓을했는지 도 다음 코드를 배치

if (DECODE_STREAM) { 
       mMovie = Movie.decodeStream(is); 
      } else { 
       byte[] array = streamToBytes(is); 
       mMovie = Movie.decodeByteArray(array, 0, array.length); 
      } 

     } 

암시 가비지 수집기의 실행

및 회피 이 이제 GIF 이미지 미세

작업 후에
관련 문제