2015-04-24 26 views
4

检查一些旧的代码我发现这个片段:完成后可以恢复Android活动吗?

@Override 
public void onResume() { 
    if (!isFinishing()) { 
     ... 
    } 
    super.onResume(); 
} 

尽管在方法,它是气馁的结束super.onResume()电话:

注意:您实现这些生命周期方法必须随时拨打 做任何工作前的超类实现,如图所示 例子上述 http://developer.android.com/guide/components/activities.html

我很担心if (!isFinishing())调用,这是否有意义?因为我可以看到检查活动代码mFinished变量只在finish()finishActivity()上设置为true,才能通过Android生命周期恢复正在销毁的活动?

在此先感谢。

+0

也就是说有趣没用。你从哪里找到这些代码? – shkschneider

+0

是我公司应用的主要活动。 –

+0

onDestroy():在您的活动被销毁之前接收到的最终呼叫。这可能是因为活动正在完成(某人称为finish(),或者系统暂时销毁该活动的实例以节省空间,您可以使用isFinishing()方法区分这两种情况。 //developer.android.com/reference/android/app/Activity.html – shkschneider

回答

1

最后,遗留代码是在onCreate()方法调用在某些circunstances finish()。但在onCreate()javadoc考虑看看:

你可以从这个函数中调用finish(),在这种情况下 的onDestroy()会立即调用时没有任何 活动周期的其余部分(在onStart() ,onResume(),onPause()等)执行。

所以,这isFinishing()电话里面onResume()

1

对您的问题的回答是“否”活动如果被破坏无法恢复。
这里是很好的讨论: Understanding of isFinishing()

的原因代码可能是定向 变化和活动重要的实际整理区分这里要注意 是isFinishing:真,这意味着在调用isFinishing()在 的onDestroy()返回true,即其发生在:

用户点击“返回”按钮或活动的代码调用它的finish()isFinishing()返回false时,活动歌厅0后关闭为了电话rotaion再次启动)

http://ogrelab.ikratko.com/activity-lifecycle-explained-in-details/

+0

我明白你的观点,以及在onDestroy中使用isFinishing()的原因,但对onResume()我仍然没有任何意义() –

+0

没有理由在onDestroy中使用isFinishing(),因为onDestroy可能根本不会被调用。 – Radoslav

+0

这不是我们在这里讨论的 –