noHistory vs finish() – 哪一个是首选?

我不希望我的应用程序显示几个Activity (说SplashScreenActivity )时按下button。 所以我在这个Activity Manifest.xml使用了noHistory=true ,如下所示:

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

而不是设置noHistory ,我也可以在我的SplashActivity.onPause()方法或任何我想要的地方调用finish() ,如下所示:

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

两者完美地完成这项工作。 但是,哪一个更好使用,使用noHistory或调用finish()

Related of "noHistory vs finish() – 哪一个是首选?"

onPause()完全不是一个好的地方,为你的活动做一个finish()调用。 onPause()可能因为各种各样的原因而被调用,而且我怀疑你的用户会很高兴地看到,无论他们在做什么都被你的应用程序简单的忘记了,例如,如果他们关掉了屏幕,

noHistory应该可以为您提供服务,但您可以在启动新的Activity后立即在您的Activity调用finish()来获得类似的行为。 然而, noHistory是可维护的,因为如果稍后将另一个startActivity()调用添加到SplashActivity ,最终可能会忘记包含finish()调用。

如果你想调用finish() ,你应该在startActivity调用之后执行它,如果你在任何生命周期callback中执行它,就像NasaGeek所说的那样,它可以在不同的时刻被调用,而不仅仅是在导航到其他活动时。

没有历史的好处是, 系统负责在正确的时刻完成活动 (正如你可以在这里阅读,系统实际上会为你调用finish()方法),所以你可以确定你没有调用它在一个不好的时刻,而且一切都是安全的(可能这个现在看起来并不重要,但是也可能是,比如在使用线程的时候)

另外,它的好处在于,活动不仅在您启动另一个活动时完成 ,而且在用户离开它的任何其他情况下以及在屏幕上不再可见的活动 ,例如当用户按下时后退button (如你所愿), 或者当另一个活动来到前台

不要使用Onpause(),因为活动在后台进行。这种情况可以是任何时间,如意图或popup消息(自定义)。 最好使用另一个选项,而不是使用活动的生命周期。 如果它适合你的话,那么它就是nic。你也可以试试下面的内容,

 <activity android:name="com.gokul.SplashScreenActivity" android:launchMode="singleTask" android:clearTaskOnLaunch="true"> </activity>