문제

나는 j2me에 존재하는 개념에 익숙하지 않지만, 내가하지 말아야 할 방식으로 게으르다 : 최근에 내 앱은 사탕 인 것처럼 이미지를 메모리에로드하고있다 ...

Sprite example = new Sprite(Image.createImage("/images/example.png"), w, h);

그리고 나는 그것이 가장 좋은 방법인지 확실하지 않지만, 어제 밤까지 오래된 삼성 핸드폰에서 앱을 테스트했을 때까지 Motorola Z6에서 잘 작동했습니다. 나타나다. 화면은 흰색으로 남아 있었기 때문에 이미지 로딩에 대해 제가 잘하지 못하는 것에 대해 무언가가되어야한다는 것을 깨달았습니다 ... 내 앱에서 로딩 루틴을 올바르게 만드는 방법을 알려주는 사람이 있습니까?.

도움이 되었습니까?

해결책

나는 당신이 무엇을 찾고 있는지 정확히 잘 모르겠지만, 당신이 설명하는 행동은 당신이 외향 예외를 경험하는 것처럼 많은 소리를냅니다. 이미지의 크기를 줄이십시오 (힙 사용은 치수를 기준으로 함) 동작이 중단되는지 확인하십시오. 이렇게하면 그것이 진정으로 외부인 문제인지 다른 것인지 알려줄 것입니다.

기타 팁 :

  1. 가장 큰 이미지에서 가장 작은로드 이미지. 이는 힙 조각화에 도움이되며 가장 큰 이미지를위한 가장 큰 힙 공간을 허용합니다.
  2. 로드 (null로 설정)를 적재하고 쓰레기를 수집 한 후 수집하는 방법에 대한 역순으로 설정하십시오. GC를 호출 한 후에 thread.yield ()를 확인하십시오.
  3. 필요한 이미지 만로드하십시오. 응용 프로그램이 더 이상 없다는 상태에서 이미지를 내립니다.
  4. 스프라이트를 만들고 있으므로 하나의 이미지에 대해 여러 개의 스프라이트가있을 수 있습니다. 이미지 풀을 작성하여 이미지를 한 번만로드하십시오. 그런 다음 각 스프라이트 객체를 필요한 수영장 내 이미지에 가리 킵니다. 질문의 예는 동일한 이미지를 메모리에 두 번 이상로드 할 가능성이 높은 것 같습니다. 그것은 낭비적이고 제외 문제의 일부가 될 수 있습니다.

다른 팁

필름 이미지 (한 이미지의 정의 된 치수에 의한 이미지 세트)를 사용하고 논리를 사용하여 한 번에 하나씩 꺼내십시오.

그것들은 하나의 이미지로 그룹화되었으므로 이미지 당 헤더 공간을 저장하므로 사용 된 메모리를 줄일 수 있습니다.

이 기술은 MIDP 1.0 메모리 제약 장치에서 처음 사용되었습니다.

이미지를 반복해서로드하지 않는 Fostah 접근법을 사용하여 다음 수업을 만들었습니다.

public class ImageLoader {
    private static Hashtable pool = new Hashtable();

    public static Image getSprite(String source){
        if(pool.get(source) != null) return (Image) pool.get(source);
        try {
            Image temp = Image.createImage(source);
            pool.put(source, temp);
            return temp;
        } catch (IOException e){
            System.err.println("Error al cargar la imagen en "+source+": "+e.getMessage());
        }
        return null;
    }
}

따라서 이미지가 필요할 때마다 먼저 수영장을 요청하거나 수영장에로드하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top