noHistory vs finish() - 哪个更受欢迎?

时间:2014-01-27 07:10:34

标签: android back-stack activity-stack

我不希望我的应用在按Activity按钮时显示少量SplashScreenActivity(例如back)。所以我在我的noHistory=true中使用Manifest.xml作为Activity,如下所示:

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

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

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

两者都能完美地完成工作。但最好使用哪一个,使用noHistory或致电finish()

4 个答案:

答案 0 :(得分:25)

onPause()根本不是为您的活动finish()拨打电话的好地方。可以出于各种原因调用onPause(),我怀疑您的用户会非常高兴地看到他们正在做的任何事情都被您的应用程序遗忘,例如,如果他们关闭并重新打开屏幕。

noHistory应该可以为您提供服务,但您可以在finish()启动新Activity后立即致电Activity,从而获得类似行为。但是,noHistory最终可维护性更强,因为如果您稍后再向finish()添加startActivity()次来电,可能会忘记加入SplashActivity来电。

答案 1 :(得分:7)

如果你想拨打finish(),你应该在startActivity电话之后进行,如果你在任何生命周期回调中都这样做,正如NasaGeek所说,可以在不同的时刻调用它,而且不仅在导航到其他活动时。

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

另外,好处是,活动不仅会在您启动其他活动时完成,而且在任何其他情况下,当用户离开它并且活动不再在屏幕上可见,例如当用户按下后退按钮(如您所愿)或当其他活动到达前景时

答案 2 :(得分:0)

当活动在后台进行时,不要使用onPause()。这种情况可以是任何时候,例如意图或弹出消息(自定义)。 最好使用另一个选项,而不是使用活动的生命周期。 没有历史选择,如果它适合你,那么它很好。你也可以试试,

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

答案 3 :(得分:0)

使用noHistory时,当您请求该活动的权限时,可能会出现一些奇怪的问题。

在Samsung Galaxy S5(Android 6)上,显示权限对话框时活动被关闭