首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态壁纸采摘器Android3.0中的IllegalArgumentException同时旋转装置

动态壁纸采摘器Android3.0中的IllegalArgumentException同时旋转装置
EN

Stack Overflow用户
提问于 2011-07-21 15:45:37
回答 2查看 3.6K关注 0票数 5

我正在为蜂窝3.0开发一个实时墙纸,但是我得到了一个随机错误。

当我在壁纸选择器(有“设置墙纸”和“设置.”的窗口按钮,以了解)和现场墙纸显示,如果我旋转设备,壁纸应该重新加载的配置适应新的方向。有时候它会,有时它会崩溃。

这个错误在某种程度上与BaseSurfaceHolder.unlockCanvasAndPost方法有关,但我真的不知道这是问题所在。我认为它不能正确地加载一些资源。

下面是错误日志:

代码语言:javascript
复制
07-21 16:07:38.490: WARN/WindowManager(292): java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@40d19f28 does not exist
07-21 16:07:38.490: WARN/WindowManager(292):     at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:6731)
07-21 16:07:38.490: WARN/WindowManager(292):     at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:6722)
07-21 16:07:38.490: WARN/WindowManager(292):     at com.android.server.wm.WindowManagerService.removeWindow(WindowManagerService.java:2414)
07-21 16:07:38.490: WARN/WindowManager(292):     at com.android.server.wm.Session.remove(Session.java:149)
07-21 16:07:38.490: WARN/WindowManager(292):     at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:120)
07-21 16:07:38.490: WARN/WindowManager(292):     at com.android.server.wm.Session.onTransact(Session.java:111)
07-21 16:07:38.490: WARN/WindowManager(292):     at android.os.Binder.execTransact(Binder.java:320)
07-21 16:07:38.490: WARN/WindowManager(292):     at dalvik.system.NativeStart.run(Native Method)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768): FATAL EXCEPTION: main
07-21 16:07:38.490: ERROR/AndroidRuntime(20768): java.lang.IllegalArgumentException
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at android.view.Surface.unlockCanvasAndPost(Native Method)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at com.android.internal.view.BaseSurfaceHolder.unlockCanvasAndPost(BaseSurfaceHolder.java:215)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at mx.livewallpaper.clock.CubeWallpaper1$CubeEngine.drawFrame(CubeWallpaper1.java:686)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at mx.livewallpaper.clock.CubeWallpaper1$CubeEngine$1.run(CubeWallpaper1.java:292)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at android.os.Handler.handleCallback(Handler.java:587)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at android.os.Looper.loop(Looper.java:132)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at android.app.ActivityThread.main(ActivityThread.java:4028)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at java.lang.reflect.Method.invokeNative(Native Method)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at java.lang.reflect.Method.invoke(Method.java:491)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
07-21 16:07:38.490: ERROR/AndroidRuntime(20768):     at dalvik.system.NativeStart.main(Native Method)
07-21 16:07:38.500: ERROR/android.os.Debug(292): Dumpstate > /data/log/dumpstate_app_error

编辑:下面的代码是第686行中的drawFrame()方法:

代码语言:javascript
复制
void drawFrame() {
            final SurfaceHolder holder = getSurfaceHolder();

            Canvas c = null;
            try {
                c = holder.lockCanvas();
                if (c != null) {

                    drawLogo3(c);
                }
            } finally {
                if (c != null) holder.unlockCanvasAndPost(c);
            }

这是所有活壁纸中的默认方法,我从Android的CubeWallpaper live壁纸样本中获取。

编辑2:

听起来像是缓冲区错误。如果我将框架设置为10 set而不是40 set,那么活壁纸Picker根本不会崩溃。是否可以编辑活壁纸行为仅为活动“活壁纸拾荒者”?

EN

回答 2

Stack Overflow用户

发布于 2012-06-11 00:16:39

在破坏表面之前让线程连接

代码语言:javascript
复制
@Override
public void onSurfaceDestroyed(SurfaceHolder holder)
{
    try 
    {
        updater.join();
    } 
    catch (InterruptedException e) 
    {

    }
    super.onSurfaceDestroyed(holder);
}
票数 1
EN

Stack Overflow用户

发布于 2012-07-06 13:24:05

当你改变设备的方向时,函数"onsurfacechange()“called.you必须做一些事情。我猜当你改变方向时,”表面保持器“也改变了。我这样做:

代码语言:javascript
复制
@Override
        public void onSurfaceChanged(SurfaceHolder holder, int format,
                int width, int height) {
                        int lockwidth = 0;
            int lockheight = 0;
            mholder = holder;
            try {

                canvas = mholder.lockCanvas();
                lockwidth = canvas.getWidth();
                lockheight = canvas.getHeight();
                if (width > height) {
                    Utils.Width = lockheight;
                    Utils.screenWidth = lockheight;
                    Utils.screenHeight = lockwidth;
                    Utils.isWidth = true;
                    if (width == 1280 && height == 720 && lockwidth == 800
                            && lockheight == 480) {
                        Utils.screenWidth = 480;
                        Utils.screenHeight = 854;
                    }
                } else {
                    Utils.Width = lockwidth;
                    Utils.screenWidth = lockwidth;
                    Utils.screenHeight = lockheight;
                    Utils.isWidth = false;
                    if (width == 720 && height == 1280 && lockwidth == 480
                            && lockheight == 800) {
                        Utils.screenWidth = 480;
                        Utils.screenHeight = 854;
                    }
                }
                mholder.unlockCanvasAndPost(canvas);
            } catch (Exception e) {
            }
            Utils.rateX = (float) Utils.Width / (float) Utils.FLA_Width;
            Utils.ratio = Utils.screenWidth / Utils.FLA_Width;
            Utils.Width = lockwidth;
            Utils.Height = lockheight;
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6778867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档