2013-04-18 5 views
2

나는 작업중인 iOS 용 AIR 모바일의 슬라이드 쇼 유형 부분을 가지고 있습니다. 사용자가 스크롤 할 수있는 네 개의 페이지가 있습니다. 각 페이지에는 Bitmap 클래스와 2 개의 TextField 클래스를 사용하여로드 된 PNG (압축 후에도 1MB 크기)가 포함되어 있습니다. 내가 앱을 통해 아무 문제없이 작동하는 맞춤 스크롤 프레임 워크를 사용하여 스크롤 할 때 앱은 PNG 이미지 각각을 비트 맵으로 캐싱하여 화면에 표시 될 때 PNG 이미지가 화면에 표시 될 때마다 화면을 떠날 때 언로드합니다. 기간 (GC보다 랜덤하지는 않지만 다음 GC 일 가능성이 높음).비트 맵으로 캐시 된 비트 맵

iOS에서 PNG를 캐싱하는 동작이 특히 느려지 며 다른 작업 (예 : 스크롤)이 진행되는 동안 특히 그렇습니다. 스크롤하는 동안 ~ 1 초의 지연이 발생합니다. 이는 분명히 용납되지 않습니다. a) 캐싱을 방지하거나 이미지 자체가 GC에 적합 할 때까지 캐싱을 길게/무기한으로 유지하는 방법이 있습니까?

내 코드를 세 번 확인했는데 cacheAsBitmap이 설정되지 않았습니다. 또한 Adobe 스카우트를 사용하여 순간적인 멈춤을 일으키는 원인을 찾아 냈으며 확실히 이미지를 캐싱했습니다. 또한 변환이나 스케일 또는 필터를 제거했거나 작동을 위해 cacheAsBitmap을 켜고 결과를 동일하게 유지할 수있는 모든 것을 제거했습니다.

+0

해당 스크롤 프레임 워크는 내용을 비트 맵으로 캐시합니까? 적어도 스크롤하는 동안. – Vesper

+0

@Vesper 처음에는 그랬지만 그렇게하면 모바일에서 너무 느리기 때문에 제거되었습니다. –

답변

2

비트 맵 캐싱은 실제로 문제가 아니 었습니다. 훨씬 더 많은 검사를 한 후에, 실제로 PNG 압축 해제임을 알게되었습니다. 기본적으로 Flash는 PNG가 화면에 표시 될 때 (캐시보다 비쌉니다) PNG 압축을 풀고 메모리에 추가 한 다음 일정 기간 화면을 벗어난 후에 프로세스를 실행 취소했습니다. 즉, 압축을 풀어야한다는 의미입니다. 각 이미지에 대한 그 기간 이후에 다시 한번.

이 문제를 해결하려면 어떤 식 으로든 BitmapData 개체에 액세스하기 만하면됩니다. 내 생성자에서 getPixel(0, 0)을 사용했고 이미지가 압축 해제되어 BitmapData에 영구히로드되었습니다. 그것은 시작에 약간의 시간을 추가 할 것이지만,이 방식으로 미리로드하면 성능이 향상됩니다.

0

실행 중이 압축을 피하려면 (요청시)로드 할 때 플래시를 압축 해제하도록 요청할 수 있습니다. 별도의 스레드가 압축을 처리하므로로드 시간이 늘어나지 만 앱의 인식 성능이 향상됩니다. 물론 이미지가 화면에 부딪 칠 때 지터 또는 건너 뛰기가 발생하지 않습니다.

var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD 
var loader:Loader = new Loader(); 
loader.load(new URLRequest("http://www.adobe.com/myimage.png"), loaderContext); 

은 참조 : (코드를 통해) http://help.adobe.com/en_US/as3/dev/WS52621785137562065a8e668112d98c8c4df-8000.html

그리고

http://www.bytearray.org/?p=2931

포함 된 이미지는 압축 안된다, 그래서이 문제는 그렇게 응용 프로그램과 함께 발생하지 않습니다. 그러나 당신이 나를 좋아하고 Flash Pro IDE를 사용하여 PNG 또는 다른 비트 맵 에셋을 가져 오는 경우 Flash Pro는 기본적으로 이미지 자체에서 제공하는 설정을 사용하여 이미지를 JPG로 압축합니다.

이 문제를 해결하고 압축 해제 문제를 피하려면 Flash Pro 애셋 라이브러리로 이동하여 변경하려는 이미지를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭 한 다음 압축으로 "무손실/PNG/GIF"를 선택하십시오. 이렇게하면로드 시간이 크게 늘어나지 만 여기서는 더 나은 인식 성능을 얻게됩니다. 위 코드를 구현하는 것 외에도이 작업을 수행해야합니다. 그렇지 않으면 아무런 차이가 없습니다.

내 경험에 의하면 프레임 속도 평균은 초당 1 프레임 밖에 떨어지지 않았지만 게임에 필수적인 건너 뛰기 또는 지연없이 훨씬 더 일관성이 있습니다.

Flash Player는 BitmapData의 압축 해제 된 비트 맵 메모리를 비울 예정이므로 이후 압축 해제가 계속되는 경우 해결 방법이 있습니다. Keeping Bitmaps Decompressed.

관련 문제