标签:
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
这个比较特殊,它启动活动时,会新建一个栈来存放新启动的活动。这种模式可以解决不同应用程序之间调用活动的问题。
标签:
原文地址:http://www.cnblogs.com/threezj/p/4690915.html