Codenameone 多次重启后应用程序冻结

Codenameone 多次重启后应用程序冻结,codenameone,Codenameone,我构建了这个应用程序,它可以拍照、显示照片以供验收,并通过post将照片上传到Web服务器 它在概念和执行上都非常简单。但是Android手机上的应用程序已经冻结了(我有一个Xperia Z3+,我有相当多的资源,也在Moto X上试用过) 为了尝试和复制这一点,我拍了一张照片(它会自动尝试上传)。。。按下电源按钮,屏幕将关闭。。。然后,当我点亮屏幕时,应用程序需要一段时间才能重新开始工作(我可以看到,因为我有一个背景动画)。在重试这些之后。。。应用程序将冻结,我必须关闭它才能重试 对如何解决此

我构建了这个应用程序,它可以拍照、显示照片以供验收,并通过post将照片上传到Web服务器

它在概念和执行上都非常简单。但是Android手机上的应用程序已经冻结了(我有一个Xperia Z3+,我有相当多的资源,也在Moto X上试用过)

为了尝试和复制这一点,我拍了一张照片(它会自动尝试上传)。。。按下电源按钮,屏幕将关闭。。。然后,当我点亮屏幕时,应用程序需要一段时间才能重新开始工作(我可以看到,因为我有一个背景动画)。在重试这些之后。。。应用程序将冻结,我必须关闭它才能重试

对如何解决此问题有何建议

我的想法是,我可以通过删除屏幕上的动画元素来解决这个问题。。。至少感觉到的性能会好得多,因为应用程序不会在任何应用程序开关上出现冻结。。。因此,我希望能够使用活动生命周期事件中的onPause、onStop来清除动画。我猜这些对象是序列化的,因此我将节省序列化和反序列化时间,而且感知性能也将提高,因为在onResume、onRestart事件期间不会看到冻结的应用程序

这可能吗

多谢各位
Chuck

这不是由动画引起的,可能是由未捕获的异常或应用程序性能差引起的

要查看应用程序性能,请将需要反馈到UI(AsyncTask)的任何长流程移动到表单的
postShow()
方法,而不是
beforeShow()
。如果它不需要实时反馈UI(IntService),请考虑使用<代码> Stutial.GestStaseAuth.StjeBeaBeTaskTo()/<代码>,在序列化它的同时,在低优先级线程上运行您的任务,这可以在方法中完成。如果表单是手工编码的(不是GUI),请在
addShowListener()
中执行冗长的过程

同时减少你在应用程序中使用的图像数量,因为这也会在加载大量图像时阻碍你的应用程序性能

避免不必要地使用
revalidate()
,通常不在循环中调用它,这有点昂贵,请改用
repaint()

你也可以使用安卓ddms来检查你的应用程序是否出现了一些错误

锁定屏幕或最小化不会影响应用程序,除非应用程序启动并显示启动屏幕(如果在显示启动屏幕时最小化应用程序,则通常会冻结应用程序)。我相信这是一个众所周知的问题

另一个选项可能是“暂停-恢复”行为。当应用程序挂起(电源按钮、来电等)时,将调用
stop()
方法,然后在返回时调用
start()
方法

如果在
stop()
方法期间有一个进度指示器,则restore调用将使用前一个表单作为其“before form”重新显示进度指示器。这样,当取消进度指示器时,它将显示“以前的表格”。您可以使用“暂停/恢复”菜单在模拟器中测试此行为

要解决此问题,只需在
stop()
方法中按如下方式处理进度指示器:

public void stop() {
    current = Display.getInstance().getCurrent();
    if(current instanceof Dialog) {
        ((Dialog)current).dispose();
        current = Display.getInstance().getCurrent();
    }
}

到目前为止,我发现我只需要留下一个足够大的形式来复制这个。。。我添加了大约100个组件,每次尝试返回应用程序时它都会冻结。我还发现,将字段标记为瞬态对应用程序状态恢复没有影响。我在底部添加了另一个可能的原因我尝试了大部分…:(我不知道如何修复性能…我开始学习原生Android和IOs…然后我有了一个想法,我想我的问题是Android操作系统正在关闭我的应用程序以释放资源。我如何保持它打开直到用按钮关闭?