web-dev-qa-db-ja.com

noHistory vs finish()-どちらが好ましいですか?

Activityボタンを押したときに、アプリケーションにSplashScreenActivity(たとえばback)がほとんど表示されないようにします。したがって、以下に示すように、そのActivityに_noHistory=true_で_Manifest.xml_を使用しました。

_<activity
    Android:name="com.gokul.SplashScreenActivity"
    Android:noHistory="true" >
</activity>
_

noHistoryを設定する代わりに、以下に示すように、finish()メソッドまたは任意の場所でSplashActivity.onPause()を呼び出すこともできます。

_@Override
protected void onPause() {
    super.onPause();
    finish();
}
_

どちらも完璧に仕事をします。しかし、noHistoryを使用するか、finish()を呼び出すには、どちらを使用するのが良いでしょうか。

22
Gokul Nath KP

onPause()は、アクティビティに対してfinish()呼び出しを行うのにまったく適した場所ではありません。 onPause()はさまざまな理由で呼び出される可能性があります。たとえば、画面をオフにしてから元に戻した場合、ユーザーが行っていたことがアプリによって単に忘れられていることをユーザーが喜んでいるとは思えません。オン。

noHistoryは問題なく機能するはずですが、新しいActivityを起動した直後にActivityfinish()を呼び出すと、同様の動作を得ることができます。ただし、noHistoryに別のfinish()呼び出しを追加すると、startActivity()呼び出しを含めるのを忘れてしまう可能性があるため、SplashActivityは最終的にはより保守しやすくなります] _後で。

27
NasaGeek

finish()を呼び出したい場合は、startActivity呼び出しの後に行う必要があります。ライフサイクルコールバックのいずれかで呼び出す場合は、NasaGeekが言うように、さまざまな瞬間に呼び出すことができます。他のアクティビティに移動するときだけではありません。

noHistoryの良いところは、システムが正しい瞬間にアクティビティを終了することです(あなたが読むことができるように- ここ 、システムは実際にfinish()メソッドを呼び出します)ので、悪い瞬間にそれを呼び出していないことを確認でき、すべてが安全です(おそらくこれは今は重要ではないようですが、しかし、それは、例えば、スレッドで作業しているときかもしれません)

また、その良い点は、アクティビティは、別のアクティビティを起動したときだけでなく、他の場合でもユーザーがナビゲートしたときに終了することです。それから離れると、アクティビティは画面に表示されなくなります。たとえば、ユーザーが戻るボタンを押したとき(必要に応じて)または別のアクティビティが前面に出たとき

7
Carlos Robles

NoHistoryを使用する場合、そのアクティビティのアクセス許可を要求すると、奇妙な問題が発生する可能性があります。

Samsung Galaxy S5(Android 6)では、権限ダイアログが表示されるとアクティビティが閉じられます

0
ylinkz

アクティビティがバックグラウンドで実行されるときに呼び出されるonPause()を使用しないでください。そして、このケースは、インテントやポップアップメッセージ(カスタム)など、いつでも発生する可能性があります。アクティビティのライフサイクルで遊ぶよりも、別のオプションを使用することをお勧めします。 nohistoryオプションが機能する場合は、Niceです。フォローもお試しいただけます、

<activity
    Android:name="com.gokul.SplashScreenActivity"
    Android:launchMode="singleTask"
    Android:clearTaskOnLaunch="true"/>
0
Harshal Benake