0

onClose()当我通过覆盖函数将程序发送到后台时,我试图让我的程序使用更少的资源。我的第一步是停止它绘制文本和仪表字段。

我一直在阅读有关效率的文档, “消除设备上不必要的处理”

“您可以使用方法在屏幕不可见时停止动画或重新绘制屏幕,​​并在屏幕再次可见时恢复。您可以覆盖 Screen.onExposed(),当您的应用程序的屏幕位于显示器顶部时调用堆栈并显示给用户。您可以覆盖 Screen.onObscured(),当您的应用程序的屏幕未向用户显示或被另一个屏幕遮挡时调用。

我知道如果我使用isForeground(),如果我的应用程序在后台,它会阻止它绘画,但如果它被另一个应用程序遮挡,它会做同样的事情吗?使用起来似乎更简单isForeground()

private boolean isExposed;

protected void onExposed()
{
    isExposed = true;
}
protected void onObscured()
{
    isExposed = false;
}

public void batteryStatusChange(int status) 
{
    // TODO Auto-generated method stub
    if ((status & DeviceInfo.BSTAT_LEVEL_CHANGED) != 0)
    {
//is there a difference between the two if's?

        //if(isExposed)     
        //if(UiApplication.getUiApplication().isForeground())

        {
        batteryStatusField.setText(getBatteryLevel());
        bitGauge6.setValue(DeviceInfo.getBatteryLevel());
        }       


    }
}
    public boolean onClose()
{
    UiApplication.getUiApplication().requestBackground();
    return true;
}
4

1 回答 1

3

一般来说,isForeground()它会告诉您您的应用程序是否在前台运行。但是,当您实现它时,该isExposed变量只会告诉您它所属的屏幕何时被暴露或隐藏(因为您在Screen.onExposed()andScreen.onObscured()方法中设置它)。

对于您的应用程序,也许您只有一个Screen子类?

大多数应用程序将有许多屏幕。因此,在这种情况下,isExposed变量只会告诉您是否正在显示一个(多个)屏幕。

如果您的应用程序只有一个Screen,那么任何一种技术都应该适合您。

但是,正如我在评论中所说,如果您发布的代码显示了您在回调中所做的一切batteryStatusChange(),那么我认为您真的不需要担心性能。考虑移动设备上的性能是件好事,但是您在该方法中进行的任何 UI 调用都不会产生任何显着的性能成本。

    batteryStatusField.setText(getBatteryLevel());
    bitGauge6.setValue(DeviceInfo.getBatteryLevel());
于 2012-09-22T07:41:58.743 回答