2011-12-21 12 views
4

私はペイントアプリケーションを準備している、私のアプリケーションは、我々だけで、配列リストで描かれたピクセルと店を集める最初それがうまく働いている(しかし、それは多くの時間を取っている)カスタムビュー内の任意のものを描くpaint.whenための1つのカスタムビューが含まれており、第二時間 " アクティビティMyAlphabets(アプリケーションMyAlphabets)が応答していません(強制終了して待機します)。アプリケーションを応答しないように固定するには?

私のコードは、私たちが「近い力」をクリックしたときLogcatこれは私を助けdraw.Please時に色画素を収集するための正しい方法で、

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 

で、

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); 
        } 
       } 
} 

です...この問題を解決するための方法を

。助けてください。

+1

LogCatください...... – ingsaurabh

+0

私はそれを –

答えて

7

UIスレッド(onDraw)の割り当てを含め、すべての計算を行っているため、アプリケーションは「アプリケーションが応答しません」というエラーになることがあります。

まず、あなたは(AsyncTaskを参照)は、非UIスレッドに計算を移動してみなければなりません。 20ms以上かかるすべての操作は、「Application Not responding」メッセージを呼び出すようにバインドされています。

第二に、あなたは、計算にあなたが描画する必要が毎回実行する必要はありませんように試してみて、あなたのコードをリファクタリングする必要があります。基本的には、イメージをオフスクリーンビットマップでレンダリングし、キャッシュし、キャッシュされたコピーからレンダリングします(onDraw)。 「やり方」の範囲は、この議論の対象外です。

+0

おかげで男を確認してください....それがうまく働いている...私の質問にLogCatを追加しました –

関連する問題