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()かどうかがわかります。ただし、実装したように、変数は、それが属する画面が公開されているか、隠されている場合にのみ通知します (およびメソッドで設定しているため)。isExposedScreen.onExposed()Screen.onObscured()

Screenアプリの場合、サブクラスが 1 つしかないのではないでしょうか?

ほとんどのアプリには多くの画面があります。したがって、そのような状況では、変数は (多数の) 1 つの画面が表示されisExposedているかどうかを示すだけです。

アプリに が 1 つしかない場合は、Screenどちらの手法でも機能するはずです。

ただし、コメントで述べたように、投稿したコードがコールバックで行っていることをすべてbatteryStatusChange()示している場合は、パフォーマンスについて本当に心配する必要はないと思います。モバイル デバイスでのパフォーマンスを考慮するのは良いことですが、そのメソッドで行う UI 呼び出しのどちらも、パフォーマンスに大きな負担がかかるべきではありません。

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