2012-07-11 205 views
2

我有以下的活动:活动实例的生命周期

public class StartActivity extends Activity 
{ 
    String str = "somestring"; 
    int number = "1"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Code here 
    } 
} 

我读如果活动完全被另一活动遮蔽在Android文档下述(http://developer.android.com/reference/android/app/Activity.htm升)

,它被停止。它仍然保留所有状态和成员信息,但是,用户不再可见,因此其窗口处于隐藏状态,并且在别处需要内存时通常会被系统杀死。

这是否意味着我的类实例(STR)是“活着”和可用,除非的onDestroy被称为或的onPause的onStop被调用后需要记忆?

+0

是的,就是这个意思。 – FoamyGuy 2012-07-11 13:46:25

+0

你为什么问?你想要做什么? – 2012-07-11 14:25:29

+0

这些变量仍然是“活着”,你称呼它,直到调用完成,或者操作系统决定摧毁它(也许调用的onDestroy()也许不是)。如果你想让这些变量持续存在,最好将你的活动状态保存在onPause()方法中,只要你的活动进入后台就会被调用。 – Joel 2012-07-11 15:49:16

回答

0

如果您的来电者的活动,你叫finish()方法,那么以前没有活动的情况下会活着,因为你已经完成了来电者的活动。所有的实例都将被垃圾收集。

但是,如果您的调用者活动不会调用finish(),那么该活动将不再可见,但它将出现在由操作系统维护的活动堆栈中。当设备处于类似的情况下内存低,例:如果活动调用摄像头(这需要丰富的资源),在这种情况下,之前的活动可能会破坏了呼叫者活性(即以前的活动)可能会完成的情况下。

因此,在您的情况下,即使StartActivity不是目前可见的活动,变量仍然存在。

+0

这不完全正确。如果设备内存不足,Android将永远不会对某个活动调用“finish()”。在这种情况下,Android将会杀了承载该活动的过程中,没有调用它的任何生命周期方法在所有(即:它不会调用'的onDestroy()' – 2012-07-11 14:24:57

+0

@大卫:我没有说结束()方法被调用的活动,如果设备处于低内存,我说这将是由操作系统被破坏。 – Shrikant 2012-07-11 14:30:53

+1

你写**“对方的活动(即以前的活动)可能会在情况下,当设备处于低完毕在内存“**我只是回应说,这是一个普遍的误解。 – 2012-07-11 14:33:18