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()
を呼び出すには、どちらを使用するのが良いでしょうか。
onPause()
は、アクティビティに対してfinish()
呼び出しを行うのにまったく適した場所ではありません。 onPause()
はさまざまな理由で呼び出される可能性があります。たとえば、画面をオフにしてから元に戻した場合、ユーザーが行っていたことがアプリによって単に忘れられていることをユーザーが喜んでいるとは思えません。オン。
noHistory
は問題なく機能するはずですが、新しいActivity
を起動した直後にActivity
でfinish()
を呼び出すと、同様の動作を得ることができます。ただし、noHistory
に別のfinish()
呼び出しを追加すると、startActivity()
呼び出しを含めるのを忘れてしまう可能性があるため、SplashActivity
は最終的にはより保守しやすくなります] _後で。
finish()
を呼び出したい場合は、startActivity
呼び出しの後に行う必要があります。ライフサイクルコールバックのいずれかで呼び出す場合は、NasaGeekが言うように、さまざまな瞬間に呼び出すことができます。他のアクティビティに移動するときだけではありません。
noHistory
の良いところは、システムが正しい瞬間にアクティビティを終了することです(あなたが読むことができるように- ここ 、システムは実際にfinish()メソッドを呼び出します)ので、悪い瞬間にそれを呼び出していないことを確認でき、すべてが安全です(おそらくこれは今は重要ではないようですが、しかし、それは、例えば、スレッドで作業しているときかもしれません)
また、その良い点は、アクティビティは、別のアクティビティを起動したときだけでなく、他の場合でもユーザーがナビゲートしたときに終了することです。それから離れると、アクティビティは画面に表示されなくなります。たとえば、ユーザーが戻るボタンを押したとき(必要に応じて)または別のアクティビティが前面に出たとき。
NoHistoryを使用する場合、そのアクティビティのアクセス許可を要求すると、奇妙な問題が発生する可能性があります。
Samsung Galaxy S5(Android 6)では、権限ダイアログが表示されるとアクティビティが閉じられます
アクティビティがバックグラウンドで実行されるときに呼び出されるonPause()を使用しないでください。そして、このケースは、インテントやポップアップメッセージ(カスタム)など、いつでも発生する可能性があります。アクティビティのライフサイクルで遊ぶよりも、別のオプションを使用することをお勧めします。 nohistoryオプションが機能する場合は、Niceです。フォローもお試しいただけます、
<activity
Android:name="com.gokul.SplashScreenActivity"
Android:launchMode="singleTask"
Android:clearTaskOnLaunch="true"/>