有的时候我们的Android在应用运行时,可能需要临时退出,比如突然接到来电(或者Sensor、Land和Port布局的自动切换),但是切换回来界面时,可能Activity又重新从第一个界面开始显示,并不是刚才用户操作的界面,这里可以通过在androidmanifest.xml中在需要保留的activity中添加android:alwaysRetainTaskStat="true" 这句即可.
当然更好的是自己用编程实现:
通过重写Activity的onSaveInstanceState(Bundle outState) 方法可以在Android系统触发结束任务时,保存当前Activity的值,而下次进入该Activity时,可以通过重写 onRestoreInstanceState(Bundle savedInstanceState) 来恢复数据,参数Bundle支持常见的String、Integer、Double、以及字节数组
有时候你的应用可能会产生多个实例,你还可以在主Activity中加入android:launchMode="singleInstance" 来强制让系统仅运行一个实例。
当然android:launchMode还有其它值, 请参考http://www.cnblogs.com/error404/archive/2011/08/03/2126576.html
http://dev.10086.cn/cmdn/bbs/thread-36313-1-1.html
http://marshal.easymorse.com/archives/2950
launchmode4种模式:
1,standard:
如果从A跳到A,intent5次,task里5个activity;
2,single Top:
如果从A 跳B,再从B跳A,如果此时栈顶为A,则不创建新实例,直接把Intent给A,但如果栈顶不是A,则还要创建A的实例
3,singleTask
如果从A跳B,再从B跳A,无论是否栈顶栈底,只要A在,则将Intent给A,不会创建A的新实例;
4,singleInstance
不同于前3种模式,前3种只是在同一个task的,而实例化的策略不同。这种模式下的activity会单独存在一个task下。
现成的例子是google地图。比如我有一个应用是导游方面的,其中调用的google地图Activity。那么现在我比如按home(后台activity onstop,back是finish)键,然后到应用列表中打开google地图,你会发现显示的就是刚才的地图,实际上是同一个Activity。
如果使用上面三种模式,是无法实现这个需求的。google地图应用中有多个上下文Activity,比如路线查询等的,导游应用也有一些上下文Activity。在各自应用中回退要回退到各自的上下文Activity中。
总结:
1 2:会创建新实例
3 4:不会创建新实例
123:activity的taskid相同
4:activity的taskid不同。被分到单独一个task中
分享到:
相关推荐
"android两个Activity的转换"这个主题涉及到如何在不同的Activity之间导航,这是Android应用交互的基础。以下是关于这个主题的详细知识: 1. **Activity的生命周期**:每个Activity都有一个生命周期,包括创建...
为了更好地理解和掌握Activity的工作机制,本文将详细介绍Android Activity的生命周期及其各个阶段的状态转换,帮助开发者深入理解并正确管理Activity的生命周期。 ### 一、Android Activity生命周期介绍 #### 1. ...
Android系统默认支持屏幕自动旋转,当设备方向改变时,系统会重新创建Activity(onSaveInstanceState()保存状态,onDestroy()销毁,onCreate()重建,onRestoreInstanceState()恢复状态)。如果不想在横竖屏切换时...
为了更好地控制 Activity 的启动方式以及它们在任务栈中的行为,Android 提供了四种不同的启动模式,即 `standard`、`singleTop`、`singleTask` 和 `singleInstance`。这些启动模式可以通过在 AndroidManifest.xml ...
在很多情况下,Android系统会自动管理应用程序的资源,保持应用在后台运行可以提供更好的用户体验,例如快速恢复先前的状态。强制退出可能会导致数据丢失,而且不符合Android的设计哲学。因此,在某些情况下,开发者...
Android系统根据用户的操作和设备状态调整Activity的状态,主要分为创建(onCreate())、启动(onStart())、可见(onResume())、暂停(onPause())、停止(onStop())、销毁(onDestroy())这几个阶段。...
本文将从Android的生命周期出发,深入解析如何在不同场景下安全地结束Activity,以确保应用的稳定性和资源的有效利用。 首先,我们需要理解Activity的生命周期。在Android中,Activity有七个主要状态:初始化(创建...
`PowerManager`类是Android SDK提供的一种接口,用于管理设备的休眠状态和唤醒功能。本文将深入探讨如何利用`PowerManager`中的`goToSleep`和`wakeUp`方法来控制设备的休眠与唤醒,并结合一个已测试通过的示例进行...
这种模式适用于需要与其他Activity保持隔离,防止相互影响的应用场景。 Activity的启动模式可以通过在AndroidManifest.xml中为相应Activity设置`launchMode`属性来指定。此外,`taskAffinity`属性可以用来控制...
因此,除非必要,通常不建议强制结束所有Activity,而是遵循Android的正常操作流程,让用户通过返回键或系统的退出选项来关闭应用。在某些特殊情况下,如内存紧张或应用需要立即退出,可以考虑采用以上方法。
一个Android应用通常由一个或多个Activity组成,它们在用户界面中扮演不同的角色。Activity之间通过Intent进行通信,形成一个栈结构,称为任务栈(Task Stack)。当用户打开一个新的Activity时,它会被压入栈顶;而...
综上所述,了解Activity的不同启动模式和生命周期状态对于开发高质量的Android应用至关重要。同时,掌握如何正确地退出Activity以及整个Application也是提高应用稳定性和用户体验的关键因素之一。
除非有特殊需求,否则尽量避免在非用户操作的情况下强制销毁Activity。如果需要优化资源,考虑使用其他机制,如Fragment的管理或者更合适的Activity设计。 总的来说,通过BroadcastReceiver以广播形式销毁栈中的...
9. 保存和恢复状态:为了应对系统因资源不足而强制销毁Activity,开发者应使用`onSaveInstanceState(Bundle outState)`来保存临时数据,并在`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle...
在"Activity生命周期完美呈现"的项目中,开发者可以创建一个简单的Activity,通过Log输出或可视化的方式,展示Activity在不同状态间的转换,这样可以直观地看到每个生命周期方法的调用顺序,加深理解。 总之,理解...
停止状态的Activity保持所有状态,但可能因内存不足被系统销毁。从暂停状态到停止状态,调用`onPause()`到`onStop()`。`onStop()`中可以进行解除注册广播等操作,因为Activity对用户不可见。当Activity从停止状态...
同时,开发者还可以根据实际需求选择不同类型的WakeLock,如 Partial Wake Lock 只保持CPU运行,而不强制保持屏幕点亮。 总之,Android中的屏幕常亮功能通过获取和释放WakeLock来实现,涉及到对PowerManager服务的...
通常,开发者会尝试使用`finish()`、`System.exit(0)`或`android.os.Process.killProcess(android.os.Process.myPid())`等方法来关闭应用,但这些...,因为Android系统会保持后台运行的Activity状态以备用户返回...
在Android中,一个应用通常由多个Activity组成,每个Activity代表一个用户界面。当用户通过点击按钮或其他方式启动退出应用的功能时,我们不能仅仅依赖于系统默认的后退栈管理机制,因为这只会回退到前一个Activity...
此外,Android还提供了`onSaveInstanceState()`方法,用于在Activity被销毁前保存关键状态,以防用户意外离开或系统强制关闭Activity时能恢复之前的状态。 总的来说,`activity-lifecycle.zip`文件可能包含了一系列...