回答
为什么你需要保持变量存活?考虑到Android应用程序的建立生命周期,我不确定阻止活动被破坏“仅仅为了保持变量”是合理的。
即使您在不破坏应用程序的情况下停止应用程序,Android始终有可能杀死它以释放内存。无论如何,您必须在代码中对此进行解释,因此防止应用程序被破坏并不会使您无法编写代码。
使用onPause()和onResume()方法中的SharedPreferences,可以相对容易和快速地保存和恢复变量。除非您存储大量数据,否则防止应用程序被破坏可能没有多大区别。
这听起来像你想保留变量在内存中,因为你打算返回到这个活动。通常情况下,您不会使用后退按钮来远离您想要返回的活动。相反,您会创建一个意图并开始一个新的活动。当你这样做时,Android将当前活动放在Back Stack上,调用onPause()和onStop(),这看起来就像你正在寻找的行为。
所以,如果你还真想防止被破坏(至少要等到Android的决定是使用过多内存,并杀死它在它自己),你总是可以使用萨格尔的代码,并在启动一个新的活动你的活动onBackPressed()。
@Override
public void onBackPressed()
{
Intent intent = new Intent(this, Other.class);
startActivity(intent);
}
只要确定那是你真正想要做的。
谢谢,作品...只是一个细节,我应该如何让它知道哪个活动开始了这个活动,以便它知道要返回哪个活动? – Roger
如果您只想返回到上一个活动,那么为什么后退按钮的正常功能不可接受?您可以通过在用于使用intent.putExtra(“activity_name”,“activity_1”)开始第二个活动的Intent中包含有关它的信息,然后在第二个活动中检索该名称来确定第一个活动。但是,除非你在做一些非常不寻常的事情,否则你的兴趣可以通过在onPause()和onResume()中正确保存你的数据,而不必重写onBackPressed()来获得。 – theisenp
+1进行详细深入的回应! –
这与之前询问的this question类似。
希望这会有所帮助! N.S.
关闭,但“moveTaskToBack(true);”停止整个应用程序(即充当“家”按钮),而我只需要停止一个活动。 – Roger
按BACK键触发Activity
类的onBackPressed
回调方法。此回调的默认实现调用finish()
方法。
http://developer.android.com/reference/android/app/Activity.html#onBackPressed()
您可以覆盖此方法来移动活动背景(模拟天生按HOME键的作用
如:
@Override
public void onBackPressed() {
onKeyDown(KeyEvent.KEYCODE_HOME);
}
你也可以改为考虑moveTaskToBackground()
提到这里:
首先,抱歉没有回答问题,原因,我仍然没有最佳答案。 但是,当人们开始问“你需要什么”时,我真的很喜欢。而且,很少有人问这个问题,确实值得这样的问题。我觉得没有这个时间,但没关系,这不是问题......
无论如何,我会尝试指出为什么我们有些人深信,
从活动A到活动B(创建UI基于一些数据提取)和从B返回到A(销毁所有创建的UI和/或B中获取的数据)有时是一个坏概念。更好的解决方案是将堆栈保持原样,因此在Activity B中使用finish(),但将Activity B保持为Pause状态,以便稍后再次从Activity A调用它时 - 它只会在onResume =没有重新创建在UI中,不需要额外的数据提取。当然,奖金是一个快速响应的用户界面,如果你有更复杂的用户界面布局,这种差异是真的。
简单的一行
@Override
public void onBackPressed() {
mActivity.moveTaskToBack(true);
}
真棒。刚刚解决了我的问题,一行 – Jigar
最好的答案,解决了一行中的问题。 –
我设法找出你想要什么: 2个活动之间切换使用后退按钮并保持所有不被摧毁!
例如:你有2个活动& B. A将首先启动,然后在装入B调用B.,用户按下返回键和切换回从B.活动距离现在B应该在不会被破坏,只是进入背景,当用户再次从A开始活动B时,活动B将被带到前台,而不是被重新创建或创建新的实例!
如何实现这一点:
1.覆盖onBackPressed()活动B的:
@Override
public void onBackPressed() {
Intent backIntent = new Intent(this, ActivityA.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(backIntent);
}
2.在活动A,呼叫活动B:
public void callActivityB() {
Intent toBintent = new Intent(this, ActivityB.class);
toBIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(toBintent);
}
记得要加标志:Intent.FLAG_ACTIVITY_REORDER_TO_FRONT当您致电A & B.
只需在活动清单中指定为
android:persistent="true"
这应该可以防止你的活动被破坏。为了更多地了解这个请参考这是由我回答了这些链接如下
How to prevent call of onDestroy() after onPause()?
Prevent activity from being destroyed as long as possible
在上面的帖子我已经详细的使用情况说明
该属性不存在以下活动:https://developer.android.com/guide/topics/manifest/activity-element.html – jekatt
@jekatt它确实存在https://developer.android.com/guide/topics/ manifest/application-element.html –
@ aravind.udayashankara此属性用于'
- 1. java.lang.IllegalStateException:(活动已被销毁)
- 2. 活动时Android停止线程在销毁时的活动
- 3. 当另一个活动停止时销毁活动
- 4. 如何销毁活动?
- 5. 如何在注销时销毁活动?
- 6. 如何在活动被销毁时从LinearLayour存储对象?
- 7. onSaveInstanceState保留活动的最新状态,即使活动已销毁或停止
- 8. 如何停止销毁会话
- 9. Android:检查活动是否被系统从服务中销毁
- 10. 状态下,当活动被销毁
- 11. java.lang.IllegalStateException:活动已被销毁 - Android片段
- 12. 销毁/停止线程
- 13. 停止对销毁应用
- 14. 停止/销毁线程
- 15. 如何从父活动停止活动?
- 16. Android:活动不会被销毁使用命令'finishActivity(999)'
- 17. 如何在onPostExecute中确定该活动现在没有暂停或被销毁?
- 18. 如何在我的活动更改或销毁时停止ASyncTask崩溃?
- 19. 销毁活动如何运作?
- 20. 如何销毁Android中的活动?
- 21. 如何在销售时不销毁当前活动
- 22. 如何销毁Android活动被破坏时的本机进程
- 23. 如何防止活动在android应用程序中销毁?
- 24. Android - 如何在动画停止后销毁对象?
- 25. 调用onPostExecute中的主要活动(在活动被销毁或处于停止状态后)
- 26. 无法销毁活动... java.lang.NullPointerException:observer
- 27. 销毁活动堆栈
- 28. 销毁活动堆栈
- 29. 正确的方法来知道活动是否已被销毁
- 30. 线程被销毁时,变量是否被销毁?
的http:// stackoverflow.com/questions/3141996/android-how-to-override-the-back-button-so-it-doesnt-finish-my-activity –
类似,但它在后退键按下时运行主要活动。我只需要停下来(即暂停并移动到背景,从而返回到之前的活动)。 – Roger
什么/多少变数?他们如何被使用?您可以考虑将它们设置为类变量,而不用担心使活动保持活动状态。 – Rob