【问题标题】:how to fix Application not responding?如何修复应用程序无响应?
【发布时间】:2011-12-21 05:49:51
【问题描述】:

我已经准备好了绘画应用程序,我的应用程序包含一个用于绘画的自定义视图。当我们在自定义视图中绘制任何东西时,只需收集绘制的像素并存储在数组列表中,首先它工作正常(但它需要很多时间)和第二次 ” Activity 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);
                    }
                }
}

当我们点击“强制关闭”时,Logcat 是,

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

这是在绘制时收集颜色像素的正确方法。请帮助我..

如何解决这个问题。请帮帮我..

【问题讨论】:

  • 我在我的问题中添加了 LogCat...请检查它

标签: android android-canvas android-custom-view


【解决方案1】:

由于您正在执行所有计算,包括 UI 线程中的分配 (onDraw),因此您的应用程序必然会出现“应用程序无响应”错误。

首先,您应该尝试将计算转移到非 ui 线程中(请参阅AsyncTask)。任何耗时超过 20 毫秒的操作都必然会调用“应用程序未响应”消息。

其次,您应该尝试重构您的代码,这样您就不必在每次绘制时都执行计算。基本上渲染你的图像是一个屏幕外的位图,缓存它并从onDraw中的缓存副本渲染它。恐怕“如何”的范围超出了本次讨论的范围。

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2019-01-05
    • 1970-01-01
    • 2013-07-13
    • 2020-04-21
    • 1970-01-01
    相关资源
    最近更新 更多