码迷,mamicode.com
首页 > 移动开发 > 详细

安卓开发 activity的生命周期以及启动模式

时间:2015-07-31 00:52:49      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

Activity生命周期

安卓活动由一个返回栈管理

安卓活动有四个状态

1.运行状态

  当一个活动位于栈顶的时候,这个活动就处于运行状态,也就是和用户进行交互的那个界面。

2.暂停状态

  当活动不处于栈顶,但依然可见。意思就是这个活动没有被完全覆盖,上面有一层对话框之类的。

3.停止状态

  活动不处于栈顶,完全不可见。这个好理解吧,就是用户看不到了。

4.销毁状态

  活动从栈中移除了,也就是被用户关闭了。

Activity共有七个回调方法,覆盖了活动整个生命周期

1.onCreate()

  活动创建时调用,一般被用来初始化。

2.onStart()

  由不可见重新可见的时候调用。

3.onResume()

  当活动到达栈顶的时候调用,也就是活动准备和用户交互的时候调用

4.onPause()

  启动或者恢复另一个活动的时候调用。

5.onStop()

  当活动完全不可见的时候会执行,注意是完全不可见,若是是启动一个对话框形式的活动,则不会启动。

6.onDestroy()

  当活动被销毁之前调用

7.onRestart()

  当活动由停止状态变为运行状态之前调用

下图很直观的表示了活动的生命周期

技术分享

 

你可以用如下示例代码 仔细探索一下 通过logcat打印的内容 你能很容易的弄明白

 1 public class MainActivity extends Activity {
 2 
 3     public static final String TAG="MainActivity";
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         Log.d(TAG,"onCreate");
 8         Log.d(TAG,this.toString());
 9         requestWindowFeature(Window.FEATURE_NO_TITLE);
10         setContentView(R.layout.activity_main);
11         if(savedInstanceState!=null)
12         {
13             String temp=savedInstanceState.getString("data_key");
14             Log.d(TAG,temp);
15         }
16         Button startNormal=(Button)findViewById(R.id.start_normal_activity);
17         Button startDialog=(Button)findViewById(R.id.start_dialog_activity);
18 
19         startNormal.setOnClickListener(new OnClickListener() {
20             
21             @Override
22             public void onClick(View v) {
23                 Intent intent=new Intent(MainActivity.this,NormalActivity.class);
24                 startActivity(intent);
25             }
26         });
27         startDialog.setOnClickListener(new OnClickListener() {
28             
29             @Override
30             public void onClick(View v) {
31                 Intent intent=new Intent(MainActivity.this,DialogActivity.class);
32                 startActivity(intent);
33             }
34         });
35 
36     }
37     @Override
38     public void onStart(){
39         super.onStart();
40         Log.d(TAG,"onStart");
41     }
42     @Override
43     public void onResume(){
44         super.onResume();
45         Log.d(TAG,"onResume");
46     }
47     @Override
48     public void onPause(){
49         super.onPause();
50         Log.d(TAG,"onPause");
51     }
52     @Override
53     public void onStop(){
54         super.onStop();
55         Log.d(TAG,"onStop");
56     }
57     @Override
58     public void onDestroy(){
59         super.onDestroy();
60         Log.d(TAG,"onDestroy");
61     }
62     @Override
63     public void onRestart(){
64         super.onRestart();
65         Log.d(TAG,"onRestart");
66     }

 

关于启动模式

activity的启动也共有四种

要修改activity的启动模式,需要在AndroidManifest.xml中修改activity标签下的   android:launchMode

1      <activity
2             android:name=".MainActivity"
3             android:launchMode="singleTop"
4             android:label="@string/app_name" >
5             <intent-filter>
6                 <action android:name="android.intent.action.MAIN" />
7                 <category android:name="android.intent.category.LAUNCHER" />
8             </intent-filter>
9         </activity>

 

1.standard

  这是活动的默认启动模式 ,这种启动模式,每次启动都会在栈中新建一个该活动的实例

  好比在FirstActivity的基础上再启动一个FirstActivity  如果你要返回的话你就要按两次返回键才能返回到桌面

2.singleTop

  这种模式很好的解决了上一种模式的问题

  如果FirstActivity这个活动已经在栈顶了 那么如果你要再启动FirstActivity 是不会再创建新的实例了的

  但是这种方法仅限于FirstActivity在栈顶的情况,如果FirstActivity不在栈顶,也就是不在用户能看到的界面,那么还是会创建新的实例。

3.singleTask

  singleTask完美解决创建重复活动实例的情况。每次启动活动,它会自动查找栈中是否存在该活动的实例,若存在直接使用,不存在才创建

4.singleInstance

  这个比较特殊,它启动活动时,会新建一个栈来存放新启动的活动。这种模式可以解决不同应用程序之间调用活动的问题。

 

 

 

安卓开发 activity的生命周期以及启动模式

标签:

原文地址:http://www.cnblogs.com/threezj/p/4690915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!