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

  目的:不同程序之间共享活动

  前三者做不到的原因:每个程序会有自己的返回栈,同一个活动在另一个返回栈入栈时,必然是创建了一个新的实例!

  单例模式下,会用一个单独的返回栈管理这个活动,无论是哪个程序来访问这个活动,都会共用该返回栈,从而共享!

 

posted @ 2015-11-23 09:33  洱海  阅读(193)  评论(0编辑  收藏  举报
.First { margin: 10px 0; font-family: 'Microsoft Yahei'; text-align: left; padding: 6px 20px; color: #fff; background: #55895B; font-size: 20px; border-radius: 4px; clear: both; } .Second { margin: 10px 0; font-family: 'Microsoft Yahei'; padding: 6px 20px; background: #93C8A2; color: white; font-size: 18px; border-radius: 4px; clear: both; } .Third { margin: 10px 0; padding: 6px 20px; font-family: 'Microsoft Yahei'; margin: 15px 0; font-size: 16px; color: black; background: #C6EFD2; border-radius: 4px; clear: both; } .note { margin: 10px 0; padding: 15px 20px 15px 60px; background: #FCFAA9 url('http://images.cnblogs.com/cnblogs_com/libaoheng/305804/o_yellow-pin.png') no-repeat 20px 0; font-size: 15px; font-family: 'Microsoft Yahei'; box-shadow: 0 0 8px #aaa; clear: both; } .demo { text-align: left; padding: 6px 20px; overflow: auto; border-radius: 4px; background: orange; color: #fff; font-size: 16px; clear: both; } .cnblogs_Highlighter { border: solid 1px #ccc; clear: both; } .cnblogs_code { background: #EFFFF4; border: solid 0px #939393; font-size: 14px; clear: both; padding: 10px 20px; } .cnblogs_code pre { font-size: 14px; } .cnblogs_code span { font-family: Courier New; font-size: 14px; }