Android生命周期二——Task,DialogActivity

来源:互联网 发布:融资担保 网络业务 编辑:程序博客网 时间:2024/06/05 05:07

Task

Task是一个栈,有压,弹两个动作,顺序先进后出。可以把Task看作是一个应用程序所有Activity的一个容器,它把所有的Activity组织在一起,让用户感觉应用程序是一个整体。

应用程序启动第一个Activity后,该Activity会被压入到栈中,
点击第二个Activity后,该Activity会被压入到栈中……

记住一点,程序只会显示在栈顶的Activity。如果Activity调用了finish方法,则会被销毁,从栈中踢出去。

直接上代码:

package com.zhd.lc;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class FirstActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.firstactivity);Button btnFirst = (Button) findViewById(R.id.btnFirst);btnFirst.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setClass(FirstActivity.this, SecondActivity.class);FirstActivity.this.startActivity(intent);}});}@Overrideprotected void onStart() {super.onStart();System.out.println("FirstActivity---->onStart");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("FirstActivity---->onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("FirstActivity---->onResume");}@Overrideprotected void onPause() {super.onPause();System.out.println("FirstActivity---->onPause");}@Overrideprotected void onStop() {super.onStop();System.out.println("FirstActivity---->onStop");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("FirstActivity---->onDestroy");}}

 

 

package com.zhd.lc;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class SecondActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.secondactivity);Button btnSecond = (Button) findViewById(R.id.btnSecond);btnSecond.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setClass(SecondActivity.this, ThirdActivity.class);SecondActivity.this.startActivity(intent);SecondActivity.this.finish();}});}protected void onStart() {super.onStart();System.out.println("SecondActivity---->onStart");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("SecondActivity---->onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("SecondActivity---->onResume");}@Overrideprotected void onPause() {super.onPause();System.out.println("SecondActivity---->onPause");}@Overrideprotected void onStop() {super.onStop();System.out.println("SecondActivity---->onStop");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("SecondActivity---->onDestroy");}}

 

 

package com.zhd.lc;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class ThirdActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.thirdactivity);Button btnThird = (Button) findViewById(R.id.btnThird);btnThird.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setClass(ThirdActivity.this, FirstActivity.class);ThirdActivity.this.startActivity(intent);}});}protected void onStart() {super.onStart();System.out.println("ThirdActivity---->onStart");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("ThirdActivity---->onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("ThirdActivity---->onResume");}@Overrideprotected void onPause() {super.onPause();System.out.println("ThirdActivity---->onPause");}@Overrideprotected void onStop() {super.onStop();System.out.println("ThirdActivity---->onStop");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("ThirdActivity---->onDestroy");}}

其他的布局文件等……就不上代码了,注意SecondActivity.this.finish(); 这句代码,会将SecondActivity从栈中踢出去,从而你在显示ThirdActivity,点击返回按钮时,会直接跳到FirstActivity去了,请看下面的方法调用顺序

03-07 09:52:48.897: INFO/System.out(312): FirstActivity---->onPause
03-07 09:52:49.127: INFO/System.out(312): SecondActivity---->onStart
03-07 09:52:49.136: INFO/System.out(312): SecondActivity---->onResume
03-07 09:52:49.516: INFO/System.out(312): FirstActivity---->onStop
03-07 09:52:50.837: INFO/System.out(312): SecondActivity---->onPause
03-07 09:52:50.938: INFO/System.out(312): ThirdActivity---->onStart
03-07 09:52:50.947: INFO/System.out(312): ThirdActivity---->onResume
03-07 09:52:51.307: INFO/System.out(312): SecondActivity---->onStop
03-07 09:52:51.315: INFO/System.out(312): SecondActivity---->onDestroy        
03-07 09:52:52.677: INFO/System.out(312): ThirdActivity---->onPause
03-07 09:52:52.775: INFO/System.out(312): FirstActivity---->onStart
03-07 09:52:52.775: INFO/System.out(312): FirstActivity---->onResume
03-07 09:52:53.156: INFO/System.out(312): ThirdActivity---->onStop
03-07 09:53:05.316: INFO/System.out(312): FirstActivity---->onPause             //可以看到并没有返回到SecondActivity
03-07 09:53:05.496: INFO/System.out(312): ThirdActivity---->onRestart
03-07 09:53:05.527: INFO/System.out(312): ThirdActivity---->onStart
03-07 09:53:05.527: INFO/System.out(312): ThirdActivity---->onResume
03-07 09:53:06.067: INFO/System.out(312): FirstActivity---->onStop
03-07 09:53:06.086: INFO/System.out(312): FirstActivity---->onDestroy

 

DialogActivity

对话框式的Activity,在代码编写上和普通的Activity没有区别,我们主要看一下他的生命周期
代码就不上了,DialogActivity实现主要就是在AndroidManifest.xml文件中指定一个属性即可:

 

.DialogActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Dialog" />

android:theme="@android:style/Theme.Dialog"这一句就是DialogActivity对话框的实现,简单吧。当然这只是最简单的一个对话框,Android提供了一系列的对话框,后面系统学习。 

DialogActivity对话框的生命周期

03-10 07:09:29.203: INFO/System.out(237): FirstActivity---->onPause
03-10 07:09:29.443: INFO/System.out(237): SecondActivity---->onStart
03-10 07:09:29.453: INFO/System.out(237): SecondActivity---->onResume
03-10 07:09:29.802: INFO/System.out(237): FirstActivity---->onStop
03-10 07:09:35.782: INFO/System.out(237): SecondActivity---->onPause
03-10 07:09:35.983: INFO/System.out(237): ThirdActivity---->onStart
03-10 07:09:35.983: INFO/System.out(237): ThirdActivity---->onResume
03-10 07:09:36.323: INFO/System.out(237): SecondActivity---->onStop
03-10 07:09:38.282: INFO/System.out(237): ThirdActivity---->onPause  //可以看到这里并没有调用ThirdActivity的断Stop方法,因为ThirdActivity这个Activity并没有完全从界面上消失,所以不会调用Stop方法,这里需要注意。
03-10 07:09:38.402: INFO/System.out(237): DialogActivity---->onStart
03-10 07:09:38.402: INFO/System.out(237): DialogActivity---->onResume
03-10 07:09:42.872: INFO/System.out(237): DialogActivity---->onPause
03-10 07:09:43.211: INFO/System.out(237): ThirdActivity---->onStop
03-10 07:09:43.262: INFO/System.out(237): FirstActivity---->onStart
03-10 07:09:43.272: INFO/System.out(237): FirstActivity---->onResume
03-10 07:09:43.723: INFO/System.out(237): DialogActivity---->onStop

方法名
下一个将调用的方法
是否会被内存回收
 

onCreate()

onStart()

onRestart()

onStart()

onStart()

onResume() or onStop()

onResume()

onPause()

onPause()

onResume() or

onStop()

Y/N 

onStop()

onRestart() or

onDestroy()

onDestroy()

nothing

 

好了,今天就到这里,休息……休息……

原创粉丝点击