Android的Activity生命周期

来源:互联网 发布:网络安全教育读后感 编辑:程序博客网 时间:2024/06/11 17:58

Android的Activity生命周期

       1、在android中,Activity主要有几个生命周期函数,分别为:onCreate(),onStart(),onResume(),onPause(),onStop(),onRestart(),onDestory(),这里只是介绍activity的整个过程。              

       2、现在有一个Activity,叫MainActivity,其中实现了以上所有的方法,而在每个方法中就只是用系统命令输出了所在的Activity类和方法名,代码如下:

        

package com.example.activitycycle;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bu = (Button)findViewById(R.id.nextActivity);bu.setOnClickListener(new OnClickListener(){  @Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(MainActivity.this, LittleActivity.class);MainActivity.this.startActivity(intent);}   });System.out.println("MainActivity-onCreate");}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("MainActivity-onDestoy");}@Overrideprotected void onPause() {super.onPause();System.out.println("MainActivity-onPause");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("MainActivity-onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("MainActivity-onResume");}@Overrideprotected void onStart() {super.onStart();System.out.println("MainActivity-onStart");}@Overrideprotected void onStop() {super.onStop();System.out.println("MainActivity-onStop");}}
          对应的xml布局文件叫activity_main.xml,只有一个文本域和两个按钮,代码如下:

           

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity"     android:orientation="vertical">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/mainActivity" />    <Button         android:id="@+id/littleActivityBtn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/littleActivityText"/>    <Button         android:id="@+id/FillActivityBtn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/fullActivityText"/></LinearLayout>

运行界面如图:

           


         3、有一个activity,叫LIttleActivity,这个Activity类似于一个dialog,这个是在AndroidManifest.xml文件中,给Activity添加:android:theme="@android:style/Theme.Dialog"属性实现的,代码如下:

          

package com.example.activitycycle;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;public class LittleActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.little_activity);System.out.println("LittleActivity-onCreate");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("LittleActivity-onDestoy");}@Overrideprotected void onPause() {super.onPause();System.out.println("LittleActivity-onPause");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("LittleActivity-onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("LittleActivity-onResume");}@Overrideprotected void onStart() {super.onStart();System.out.println("LittleActivity-onStart");}  @Override  protected void onStop() {super.onStop();System.out.println("LittleActivity-onStop");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void finishDialog(View v) {        this.finish();    }}

          4、还有一个activity,叫做FillScreenActivity,这是一个普通的Activity,只有一个TextView,代码如下:

package com.example.activitycycle;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.View;public class FillScreenActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.fillscreen_activity);System.out.println("FillScreenActivity-onCreate");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("FillScreenActivity-onDestoy");}@Overrideprotected void onPause() {super.onPause();System.out.println("FillScreenActivity-onPause");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("FillScreenActivity-onRestart");}@Overrideprotected void onResume() {super.onResume();System.out.println("FillScreenActivity-onResume");}@Overrideprotected void onStart() {super.onStart();System.out.println("FillScreenActivity-onStart");}  @Override  protected void onStop() {super.onStop();System.out.println("FillScreenActivity-onStop");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void finishDialog(View v) {        this.finish();    }}

           5、当点击上图中的“全屏Activity”时,在logCat中添加一个Sysstem.out的过滤器,显示调用方法如图:



          这时,logCat中的过滤器的输出如图:



      这时再点击返回键时,返回初始的MainActivity的界面,过滤器的输出如图:


       6、当点击“小的Activity”时,界面如图:


     这个Activity类似一个Dialog,后面的MainActivity还可见,这时过滤器的输出如图:


      当点击返回键时,这时过滤器的输出如图:

 

      总结:

                1、当启动一个Activity时,调用的方法是onCreate()->onStart()->onResume(),我的理解分别为,创建、启动、可见

                2、根据上面的例子,有一个MainActivity,主要用于启动其他的两个Activity,这里简称M

                                                  有一个LittleActivlty,这个是一个Dialog形式的Activity,这里简称L

                                                  有一个FillScreenActivity,这个是一个普通的Activity,这里简称F

                 所以:

                       当启动MainActivity时,调用的方法是:onCreate(M)->onStart(M)->onResume(M);

                       当点击"全屏Activity"时,调用的方法是:onPause(M)->onCreate(F)->onStart(F)->onResume(F)->onStop(M);

                       这时点击返回键,调用的方法是:onPause(F)->onRestart(M)->onStart(M)->onResume(M)->onStop(F)->onDestory(F);

                       当点击“小的Activity”时,调用的方法是:onPause(M)->onCreate(L)->onStart(L)->onResume(L);

                      这时点击返回时,调用的方法是:onPause(L)->onResume(M)->onStop(L)->onDestory(L);


                这里点击“小的Activity”和点击“全屏Activity”的方法调用有区别,原因是:

                     点击小的Activity时,小的Activity只是部分遮挡住了MainActivity,也就是说MainActivity还可见,但只是不能获得焦点,所以这里没有调用onStop(M)方法;

                     当点击返回键时,onPause(L)--暂停L,onResume(M)--让M可见,由于之前没有调用onStop(M)方法,所以,这里就直接调用onResume(M)让其可见,接着的就是销毁L了;

                     点击全屏的Activity时,由于第二个Activity完全遮挡住了第一个activity,所以需要调用onStop(M),当按返回键时,由于已经被调用onStop(M)停止了,所以需要从新启动,

                     调用方法是:onPause(F)--暂停F,onRestart(M)--从新启动M,onStart(M)--启动M,onResume(M)--让M可见,onStop(F)--停止F,onDestory(F)--销毁F,回收内存;

                  

             源代码可以在我的github上下载:https://github.com/GreatmanBill/android.git

             转载请附上我的地址:http://blog.csdn.net/hello_ok_google/article/details/9075579

                     

原创粉丝点击