2012-02-17 102 views
2

的期望的行为是这样的:与PhoneGap的旋转Android设备崩溃

  • 在旋转的布局被重建 - 以适应新的屏幕大小。重建是用JQuery和数学 - 而不是CSS完成的。

  • 脚本状态必须保持不变,同时运行计时器等等。这些应该像没有任何事情发生一样继续。在清单中的所有活动,以处理方向改变自己(注| configChanges =“keyboardHidden方向”:我

为了实现这个我做了这个:

  • 将机器人m没有针对某些API,所以我想它默认为API 1.这意味着将screenSize添加到configChanges是不必要的)。

  • 增加对orientationchange收听者:

    window.onorientationchange =函数(){ VAR取向= window.orientation; switch(orientation){ case 0: updateScaling(); 休息;

    case 90: 
         updateScaling(); 
         break; 
    
        case -90: 
         updateScaling(); 
         break; 
        } 
    } 
    

updateScaling只调整布局。

这有时会起作用,但有时会导致设备崩溃(仿真器以及真实设备)。在模拟器的日志中,我看到以下警告:

WARN/ActivityManager(73):启动超时已过期,放弃唤醒锁!

我做了研究,发现添加较长loadUrlTimeoutValue的活动可以帮助,和好,我加super.setIntegerProperty(“loadUrlTimeoutValue”,60000);到主要活动,但如预期也没有帮助。

我发现很多人抱怨PhoneGap的旋转问题。也许框架只是在这方面的越野车?我也用苹果设备进行测试,在那里我甚至无法捕捉旋转事件 - iPhone模拟器甚至没有改变方向,iPad改变了它,但事件处理程序没有被调用,并且布局保持相同的大小。我尝试使用一种解决方法,我发现附加一个侦听器到文档。但它也没有帮助。

旋转设备时是否有完全可靠的方法来重建布局?如果没有,我可以禁用应用程序初始化后的旋转(也就是说,我不想修复纵向或横向 - 我希望应用程序在使用当前初始化后禁用旋转更改)。有没有可靠的方法来做到这一点?

感谢

回答

0

我不太清楚,如果这个固定的崩溃问题,或者别的东西,我做了“在路上”。

但我添加了工作可靠的监听器 - 至少在Android上:

$(window).resize(function() { 
    updateScaling($('body').width()); 
}); 

它总是调用,并通过正确的宽度。据我记得它也适用于screen.width

在updateScaling我计算scalingFactor并调整我的元素。

我删除了window.onorientationchange。

注意:这可能是在崩溃时,我在清单中使用了android:configChanges =“keyboardHidden”,而不是android:configChanges =“orientation | keyboardHidden”。 AFAIK这意味着系统重建活动,这可以解释超时。但在这种情况下,我不知道为什么super.setIntegerProperty(“loadUrlTimeoutValue”,60000);没有帮助。

结论

$(窗口).resize与Android的组合:configChanges = “方向| keyboardHidden” 为我工作。