2011-12-21 3 views
4

페인트 응용 프로그램을 준비했습니다. 내 응용 프로그램에는 paint.when에 대한 하나의 사용자 정의보기가 포함되어 있습니다. 사용자 정의보기에서 그려진 픽셀을 수집하고 배열 목록에 저장하면 먼저 작동합니다 (하지만 시간이 많이 걸립니다). 시간 " 활동 MyAlphabets (응용 프로그램 MyAlphabets)이 응답하지 않습니다 (닫고 기다리십시오)." 내 코드는어떻게 응용 프로그램이 응답하지 않습니까?

public void onDraw(Canvas canvas) { 

     if (myDrawBitmap == null) { 
      myDrawBitmap = Bitmap.createBitmap(canvas.getWidth(), 
        canvas.getHeight(), Bitmap.Config.ARGB_8888); 
      bmpDrawCanvas = new Canvas(myDrawBitmap); 
      intDrawArray = new int[myDrawBitmap.getWidth() 
        * myDrawBitmap.getHeight()]; 
     } 
     if (bmpDrawCanvas != null) { 
      for (Path path : MyActivity.mArryLstPath) { 
       bmpDrawCanvas.drawPath(MyActivity.mPath, 
         mPaintAlphabet); 
      } 
myDrawBitmap.getPixels(intDrawArray, 0, 220, 0, 0, 220, 305); 
        for (int i = 0; i < intDrawArray.length; i ++) { 

       if (intDrawArray[i] == 0xFFFFFFFF) { 

        if (MyActivity.mArryLstDrawnPixels.contains(i)) { 

        } else { 
         MyActivity.mArryLstDrawnPixels.add(i); 
        } 
       } 
} 

우리는 "강제 종료"로그 캣은 클릭

,

INFO/ActivityManager(52): Killing process com.qteq.myapplication (pid=225) at user's request 

INFO/Process(52): Sending signal. PID: 225 SIG: 9 

INFO/ActivityManager(52): Process com.qteq.myapplication (pid 225) has died. 

INFO/WindowManager(52): WIN DEATH: Window{608fbd10 com.qtq.myapplication/com.qtq.myapplication.MyApplicationActivity paused=false} 

INFO/UsageStats(52): Unexpected resume of com.android.launcher while already resumed in com.qtq.myapplication 
ERROR/gralloc(52): [unregister] handle 0x4a2740 still locked (state=40000001) 

WARN/InputManagerService(52): Got RemoteException sending setActive(false) notification to pid 225 uid 10025 

이 나를 도와 draw.Please시 컬러 픽셀을 수집하는 올바른 방법입니다 ..

이 문제를 해결하는 방법. 제발 도와주세요.

+1

LogCat please ... – ingsaurabh

+0

내 질문에 LogCat을 추가했습니다 ... 확인하십시오 –

답변

7

UI 스레드 (onDraw)의 할당을 포함하여 모든 계산을 수행하므로 응용 프로그램이 "응용 프로그램이 응답하지 않습니다."라는 오류가 발생합니다.

먼저 계산을 비 -ui 스레드로 옮겨보십시오 (AsyncTask 참조). 20ms 이상 걸리는 작업은 "Application Not responding"메시지를 호출하도록 바인딩됩니다.

두 번째로, 그릴 때마다 계산을 수행 할 필요가 없도록 코드를 리팩터링해야합니다. 기본적으로 이미지를 화면 비트 맵으로 렌더링하고 캐시 한 다음 캐시 된 사본에서 onDraw으로 렌더링합니다. "방법"의 범위는이 토론의 범위를 벗어납니다.

+0

고마워요 .... 잘 작동하고 있습니다. –