2011-10-06 72 views
8

本主题继续这样的: Android. How to start activity without creating new one?如何重用活动?不创建活动,每次

我已阅读,活动被破坏时,单击后退按钮。 当它们移动到堆栈然后再调用活动时,它们不会被销毁。使用android:launchMode="singleTask"例如

当我单击按钮BACK并再次运行活动时,是否有可能不会销毁活动?

+1

我不会建议,因为用户可以选择按主页按钮来做到这一点(如果它需要内存,Android会杀死你的应用程序)。由于这样的决定,用户开始使用混乱的任务杀手(在我看来)。然后,开发人员正在努力使他们的应用程序工作,因为用户正在通过任务杀手来杀死他的应用程序......不要惹恼android生命周期;-) – Knickedi

+0

为什么你甚至想要这样做? I.不能想到单一的好处。 – frostymarvelous

+0

一个好处是,如果活动布局复杂并且需要10秒钟才能被加载,然后可以节省10秒,重新使用该活动而不需要从头开始创建它。 – Ehsan

回答

0

你可以重新定义你的活动的“onBack”的方法,像

public void onBackPressed() 
{ 
    moveTaskToBack (true); 
} 
16

返回按钮的默认实现的东西是完成当前活动。然而,你可能会拦截那个按键并按照你的意愿做任何事情。例如,您可以“完成”以前的活动,而不是完成当前的活动,从而使其看起来好像正常实施即将到来。

拦截后退按钮按下:Android: intercepting back key

,并不会产生一个新的每次开始以前的活动:

Intent i = new Intent(View.getContext(), PreviousActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(i); 

好运。

+0

+1 Thanks.It working fine –

+1

我发现这个答案很有用,但是对毫无戒心的开发人员提出了警告:当你需要一个Context时,**请不要使用Application Context **,除非你知道你在做什么。在这种情况下,您只需传递'this'(当前的Activity实例)而不是Application Context。 –

+0

谢谢你们......你节省了我的时间...... !!! –

0

您可以在关闭时,你压回button.You也可以用下面的方法禁用后退按钮

public void onBackPressed() 
{ 
    //super.onBackPressed(); 
} 

,你也可以开始新的活动停止活动如果后退按钮用户点击喜欢

public void onBackPressed() 
{ 
    startActivity(new Intent(context, newActivity.class)); 
} 

其实你应该完成活动,如果用户按下返回按钮 .else可以有更多的活动将驻留在回栈,所以可能会有内存问题,所以在这种情况下,Android会摧毁你的活动这些领带已停止并且不会在很长时间内恢复。

+0

请注意:新的'onBackPressed()'方法需要API 5或更高版本。对旧设备使用onKeyDown。 –

+0

'onBackPressed()'需要API7及更高版本,所以如果我们要实现低于API5,我们必须使用onKeyDown – Dharmendra

+0

我错过了什么?我仍然认为它是[API5](http://developer.android.com/reference/android/app/Activity.html#onBackPressed())。:) –