how to fix Application not responding?

2019-02-23 13:50发布

问题:

i have prepared paint application,my application contains one custom view for paint.when we draw any thing in custom view just collect the drawn pixels and store in array list,first it's working fine(but it's taking lot of time) and second time " Activity MyAlphabets(in application MyAlphabets)is not responding(force close and wait)".

My code is,

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

when we click on "force close" Logcat is,

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

This is correct way to collect color pixels at the time of draw.Please help me..

how to solve this problem. please help me..

回答1:

Your application is bound to get "Application not responding" errors since you're doing all your computation, including allocation in the UI thread (onDraw).

Firstly, you should try moving the computations into a non-ui thread (see AsyncTask). Any operation that is taking more than 20ms is bound to invoke the "Application Not responding" message.

Secondly, you should try and refactor your code such that you do not have to perform the computation every time you have to draw. Basically render your image is an off screen bitmap, cache it and render it from the cached copy in onDraw. The scope of "how to", I'm afraid, is beyond the scope of this discussion.