Android——活动的生命周期与启动模式
生命周期:
原:http://blog.csdn.net/w709835509/article/details/7655240
1 import android.app.Activity; 2 import android.os.Bundle; 3 4 public class MainActivity extends Activity { 5 // 在这里进行初始化操作,如界面加载与事件绑定 6 @Override 7 public void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 if (savedInstanceState != null) { 10 // 恢复临时数据 11 String tempData = savedInstanceState.getString("key"); 12 // ... 13 } 14 } 15 16 // 在这里保存临时数据 17 @Override 18 public void onSaveInstanceState(Bundle outState) { 19 super.onSaveInstanceState(outState); 20 // 设活动A->B,A处于停止状态,可能被系统回收,此时在Back键,依然会回到A,但是会调用A的onCreate方法而不是onRestart,临时数据将不再存在,如界面数据 21 // 通过Bundle这个参数,可以将临时数据保存,各种put...;当A再被创建时,可以取出Bundle存的数据,进行相关操作,如上: 22 String tempData = "this is temp data"; 23 outState.putString("key", tempData); 24 } 25 26 // 重启调用,由停止状态变为运行状态 27 @Override 28 public void onRestart() { 29 super.onRestart(); 30 // 当知道这个进程中的活动已经可见之后,载入改变 31 } 32 33 // 在可见生存期开始时调用 34 @Override 35 public void onStart() { 36 super.onStart(); 37 } 38 39 // 活动已准备好和用户交互——在返回栈栈顶 40 @Override 41 public void onResume() { 42 super.onResume(); 43 // 据说:恢复活动所需要的任何暂停的UI更新、线程或者进程,但是当不活动的时候,就挂起它们 44 } 45 46 // 活动暂停时,活动依然可见,如此时弹出对话框,活动就处于暂停 47 @Override 48 public void onPause() { 49 // 据说:当活动不是前台的活动状态的活动时,挂起不需要更新的UI更新、线程或者CPU密集的进程。 50 super.onPause(); 51 // 即释放CPU资源,保存关键数据,但是动作一定得快,否则影响新栈顶活动 52 } 53 54 // 活动完全不可见 55 @Override 56 public void onStop() { 57 // 据说:当进程不可见的时候,挂起不需要的剩下的UI更新、线程或者处理,保存所有的编辑或者 58 // 状态改变,因为这个进程可能会被销毁(从而为其他进程释资源) 59 super.onStop(); 60 } 61 62 // 在完整生存期结束时调用 63 @Override 64 public void onDestroy() { 65 // 清空所有的资源,包括结束线程、关闭数据库连接等。 66 super.onDestroy(); 67 } 68 69 }
活动的四种启动模式:
目前一直没用到过这个启动模式,简单总结一下,以备后用
启动模式需要在Manifest中注册,在Activity中增加一项launchMode,如:android:launchMode = "singleTop"
主要是指定Android管理返回栈时如何对已经存在的活动进行控制
1.standard:默认如此
每次启动活动时,都会创建一个新的活动,无论返回栈中是否存在该活动
2.singleTop
启动活动时,当且仅当活动在栈顶,此时会直接调用该活动而不重新创建
3.singleTask
启动活动时,如果返回栈中存在这个活动的实例,这个活动之上的所有活动将被出栈,只剩下这一个任务!否则才创建新实例
4.singleInstance
目的:不同程序之间共享活动
前三者做不到的原因:每个程序会有自己的返回栈,同一个活动在另一个返回栈入栈时,必然是创建了一个新的实例!
单例模式下,会用一个单独的返回栈管理这个活动,无论是哪个程序来访问这个活动,都会共用该返回栈,从而共享!