23

Activityボタンを押したときにアプリケーションにいくつか(たとえばSplashScreenActivity)を表示させたくありませんback。そのため、以下に示すように、そのために使用noHistory=trueしました。Manifest.xmlActivity

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

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

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

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

4

4 に答える 4

27

onPause()finish()あなたの活動を呼びかける場所としてはまったく適していません。onPause()さまざまな理由で呼び出される可能性があり、たとえば、画面をオフにしてから再びオンにした場合、ユーザーが行っていたことがアプリによって単に忘れられたのを見て、ユーザーが非常に喜んでいるとは思えません。

noHistoryfinish()正常に機能するはずですActivityが、新しいActivity. ただし、後で別の呼び出しを追加すると、呼び出しnoHistoryを含めるのを忘れてしまう可能性があるため、最終的には保守性が高くなります。finish()startActivity()SplashActivity

于 2014-01-27T07:23:43.690 に答える
8

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

の良いところnoHistory、システムが適切なタイミングでアクティビティを終了することです (ここで読むことができるように、システムは実際に finish() メソッドを呼び出します)。悪い瞬間に、そしてすべてが安全です (おそらくこれは今は重要ではないようですが、たとえばスレッドを操作する場合などに重要になる可能性があります)

また、その良い点は、別のアクティビティを起動したときにアクティビティが終了するだけでなく、ユーザーがアクティビティから離れてアクティビティが画面に表示されなくなった場合にも終了することです。戻るボタン(必要に応じて)または別のアクティビティがフォアグラウンドになったとき

于 2014-01-29T10:21:17.617 に答える
0

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

<activity
    android:name="com.gokul.SplashScreenActivity"
    android:launchMode="singleTask"
    android:clearTaskOnLaunch="true"/>
于 2014-01-31T08:48:57.480 に答える
0

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

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

于 2019-05-14T06:51:39.420 に答える