4

誰かがメインのアクティビティを終了したときに終了を呼び出す必要があるアプリがあります (そのため、一時停止したくありません)。ホーム アクティビティを終了する必要があります。これを処理するには、現在finish()onPause()メソッドを呼び出すだけです。フラグメントで行われ、かなりうまく機能し、安定性の問題はありません。

私の唯一の問題は、onPause()以前に呼び出されたため、向きの変更を処理できないonConfigurationChanged()ことです (回転が発生したときにこの動作を無効にできます)。

これを処理するサービスを作成できますが、複雑になります。

何か案が?

4

4 に答える 4

7

onPause の代わりにonWindowFocusChangedイベントを使用できます。この関数は、向きが変更されたときに呼び出されません。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    Log.d(TAG, "FOCUS = " + hasFocus);
    if (!hasFocus) finish();
}

ただし、注意: このイベントは、アクティビティがまだ表示されているときに呼び出されます (onPause() など)。実際には完全に非表示になっているときにアクティビティを終了する場合は、onStop を使用する必要があります。

private boolean isInFocus = false;

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    Log.d(TAG, "FOCUS = " + hasFocus);
    isInFocus = hasFocus;
}

@Override
public void onStop() {
    super.onStop();
    if (!isInFocus) finish();
}
于 2013-04-29T09:03:31.373 に答える
3

その簡単な方法は次のとおりです。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        display = ((WindowManager) getSystemService(WINDOW_SERVICE))
                .getDefaultDisplay();
        orientation = display.getOrientation();

    }

@Override
    protected void onPause() {
        // TODO Auto-generated method stub

        int orientation_ = display.getOrientation();
        if (orientation_ != orientation) {
            finish();
        }
        Log.e("hello=---->", "onPause");
        super.onPause();
    }
于 2013-04-29T09:17:52.843 に答える
0

あなたの質問から、アクティビティが 1 つしかないようです。この場合、代わりにマニフェストにフラグを設定する必要があります。MainActivity マニフェストに追加します

android:clearTaskOnLaunch="true"
于 2013-04-29T08:45:59.630 に答える
0

向きの変更をリッスンし、変更イベントでそれに関するブール値を保存できます。

boolean orientationChanging;

onPause よりも、方向が変化するときはこれを true にし、その後は false にします。

@Override
protected void onPause() {

    if(!orientationChanging){
                finish();
            }
}
于 2013-04-29T08:51:15.973 に答える