亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android編程中activity的完整生命周期實例詳解

2020-04-11 11:09:40
字體:
來源:轉載
供稿:網友

本文實例分析了Android編程中activity的完整生命周期。分享給大家供大家參考,具體如下:

android中 activity有自己的生命周期,對這些知識的學習可以幫助我們在今后寫程序的時候,更好的理解其中遇到的一些錯誤。這篇文章很長,希望不要耽誤大家的時間~

今天不會涉及太多關于activity棧的東西,主要說activity自身的生命周期

區分幾個概念

1 Activity 官方解釋為 “An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the  phone, take a photo, send an email, or view a map. Each activity is given a window in which to draw its user interface. ”也就是用戶用來交互的每一個窗口,用戶當前正在進行的一個操作。

2 back-stack  用戶通過觸摸程序會通過application launcher來啟動一個activity A,啟動的activity A會被壓入棧頂,如果當前的activity A再啟動一個新的activity B,那么此時A調用onStop函數,系統會維護這個activity信息.當用戶按下back鍵的時候,back stack會進行一個pop的操作,并且調用A的onResume()  具體的進出棧細節,以后會詳細介紹。

3 Tasks  當用戶處于某個activi提: Activity A在名稱為"TaskOne應用ty的時候,按下HOME鍵用戶返回到launcher,此時,如果用戶再觸摸新的應用,則新建一個Task,一個back stack就代表一個task.不同程序的activity可以壓入同一個棧中,也就是說可以組成一個task,比如你的程序啟動了一個系統自帶的發短信的activity,給用戶的感覺就是發短信好像是你的程序中的一個功能一樣。

注釋:以上的行為均為系統的默認設置,有兩種方式可以改變activity的行為,加入A啟動B,一是在B的manifest設置中,改變行為,另一種是在Activity發起的intent中指定要啟動的activity設置,其中Intent的優先級要高于manifest.xml文件,并且有些mode在并不是同時都存在于兩種方式中

android的生命周期包括  onCreate onStart onRestart onResume onPause onStop onDestroy ,activity在聲明周期中會調用以上方法來執行不同狀態對應的操作,下面介紹各個方法的調用時間

onCreate()     次狀態下activity不可被終結
Called when the activity is first created. This is where you should do all of your normal static set up: create views, bind data to lists, etc. This method also provides you with a Bundle containing the activity's previously frozen state, if there was one.

Always followed by onStart().
//當activity第一次被創建的時候調用。你應該在這個方法里進行所有的靜態創建,創建views,(通過setContnetView方法)向lists綁定數據等等。如果存在保存的狀態的話,該方法也提供給你一個包含activity最近狀態的一個bundle。onStart方法總是在此方法之后調用

onRestart()    次狀態下activity不可被終結
Called after your activity has been stopped, prior to it being started again.
Always followed by onStart()
//在你的activity停止后被調用,在重新開始之前調用

onResume()    次狀態下activity不可被終結
Called when the activity will start interacting with the user. At this point your activity is at the top of the activity stack, with user input going to it.
Always followed by onPause().
//當activity將被啟動與用戶交互的時候被調用。此刻你的activity處于activity棧的頂端,用于用戶輸入,永遠///在onPause之后被調用

onPause()    次狀態下activity不可被終結 ,android HoneyComb系統除外
Called when the system is about to start resuming a previous activity. This is typically used to commit unsaved changes to persistent data, stop animations and other things that may be consuming CPU, etc. Implementations of this method must be very quick because the next activity will not be resumed until this method returns.
Followed by either onResume() if the activity returns back to the front, or onStop() if it becomes invisible to the user.

//當系統即將重新開始以前的activity的時候被調用(不懂,自己的理解是:當當前activity要啟動新的activity的時候被調用),典型的應用是用來將還未保存的數據提交到當前的數據,(意思就是保存數據更新),停止animations和其他可能耗費CPU的操作。對此方法的實現必須快速因為下個activity直到此方法返回才會被重新開始。

當activity從back(翻譯后臺不合適)轉到front(與用戶交互的狀態)的時候,onResume方法會在onPause方法之后被調用

當activity變為不可見的時候,onStop方法會在onPause之后被調用

onStop()     次狀態下activity可以被終結
Called when the activity is no longer visible to the user, because another activity has been resumed and is covering this one. This may happen either because a new activity is being started, an existing one is being brought in front of this one, or this one is being destroyed.
Followed by either onRestart() if this activity is coming back to interact with the user, or onDestroy() if this activity is going away.

//當activity對用戶不再可見時被調用,因為另一個activity已經重新開始并且覆蓋了當前activity(在棧中)。當有新的activity被啟動,或者一個存在的activity重新回到前臺狀態,又或者當前的activity將被銷毀。如果activity要返回前臺和用戶進行交互則在此方法后調用onReatart方法,如果當前activity要消亡,則onDestroy方法將在此方法后被調用

onDestroy()     次狀態下activity可以被終結
The final call you receive before your activity is destroyed. This can happen either because the activity is finishing (someone called finish() on it, or because the system is temporarily destroying this instance of the activity to save space. You can distinguish between these two scenarios with the isFinishing() method.

這是當你的activity被消亡時接收到的最后一個方法。調用此方法有兩種情形:一是 activity將要完成,可通過調用finish方法實現。而是系統銷毀activity的實例來釋放空間??梢允褂胕sFinish方法來區別兩種情形。這個方法常用在onPause方法中,來判斷activity是暫停還是將終止。后面的demo將會演示這個功能。

下圖是官網的一個生命周期的演示

好了 看一下我寫的一個演示的例子吧,

MainFest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="uni.activity"    android:versionCode="1"    android:versionName="1.0">   <uses-sdk android:minSdkVersion="7" />   <application android:icon="@drawable/icon" android:label="@string/app_name">     <activity android:name=".ActivityDemoActivity"          android:label="@string/app_name">       <intent-filter>         <action android:name="android.intent.action.MAIN" />         <category android:name="android.intent.category.LAUNCHER" />       </intent-filter>     </activity>     <activity android:name=".Activity01"          android:label="@string/app_name">     </activity>   </application> </manifest>

布局文件 main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   > <TextView    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="@string/hello"   />  <Button    android:id="@+id/Button_A"   android:text="GO to activity 2"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   /> </LinearLayout>

activity01.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   > <TextView    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="@string/hello"   />  <Button    android:id="@+id/Button_A"   android:text="GO to activity 2"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   /> </LinearLayout>

String.xml

<?xml version="1.0" encoding="utf-8"?> <resources>   <string name="hello">Hello World, ActivityDemoActivity!</string>   <string name="app_name">ActivityDemo</string>   <string name="activity01">this is activity 01</string> </resources>

ActivityDemoActivity.java

/*  * @author octobershiner  * 2011 07 29  * SE.HIT  * 演示完整的activity的聲明周期,以及isFinish方法的調用  * 此activity為程序入口activity  * */ package uni.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class ActivityDemoActivity extends Activity {   /** Called when the activity is first created. */   private static final String TAG = "demo";   private Button button_A;   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     button_A = (Button)this.findViewById(R.id.Button_A);     button_A.setOnClickListener(new myButtonListener());   }   private class myButtonListener implements OnClickListener{     @Override     public void onClick(View v) {       // TODO Auto-generated method stub       Intent intent = new Intent();       intent.setClass(ActivityDemoActivity.this, Activity01.class);       ActivityDemoActivity.this.startActivity(intent);       //感興趣的朋友可以取消下面的代碼注釋,來測試finish方法的使用,會發現第一個activity會被強制終止       //ActivityDemoActivity.this.finish();     }   };   protected void onStart(){     super.onStart();     Log.i(TAG, "The activityDemo state---->onStart");   }   protected void onRestart(){     super.onRestart();     Log.i(TAG, "The activityDemo state---->onReatart");   }   protected void onResume(){     super.onResume();     Log.i(TAG, "The activityDemo state---->onResume");   }   protected void onPause(){     super.onPause();     //調用isFinishing方法,判斷activity是否要銷毀     Log.i(TAG, "The activityDemo state---->onPause");     if(isFinishing()){       Log.w(TAG, "The activityDemo will be destroyed!");     }else{       Log.w(TAG, "The activityDemo is just pausing!");     }   }   protected void onStop(){     super.onStop();     Log.i(TAG, "The activityDemo state---->onStop");   }   protected void onDestroy(){     super.onDestroy();     Log.i(TAG, "The activityDemo state---->onDestroy");   } }

Activity01.java

/*  * @author octobershiner  * 2011 07 29  * SE.HIT  * 演示完整的activity的聲明周期,以及isFinish方法的調用  * 此activity可由ActivityDemoActivity啟動  * */ package uni.activity; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class Activity01 extends Activity{   private static final String TAG = "demo";   @Override   protected void onCreate(Bundle savedInstanceState) {     // TODO Auto-generated method stub     super.onCreate(savedInstanceState);     setContentView(R.layout.activity01);     Log.d(TAG, "The activity01 state---->onStart");   }    protected void onStart(){       super.onStart();       Log.d(TAG, "The activity01 state---->onStart");     }     protected void onRestart(){       super.onRestart();       Log.d(TAG, "The activity01 state---->onReatart");     }     protected void onResume(){       super.onResume();       Log.d(TAG, "The activity01 state---->onResume");     }     protected void onPause(){       super.onPause();       Log.d(TAG, "The activity01 state---->onPause");       //調用isFinishing方法,判斷activity是否要銷毀       if(isFinishing()){         Log.w(TAG, "The activity01 will be destroyed!");       }else{         Log.w(TAG, "The activity01 is just pausing!");       }     }     protected void onStop(){       super.onStop();       Log.d(TAG, "The activity01 state---->onStop");     }     protected void onDestroy(){       super.onDestroy();       Log.d(TAG, "The activity01 state---->onDestroy");     } } 

下面是演示的結果,

操作過程是:啟動ActivityDemoActivity

然后單擊按鈕進入Activity01

(可見activity先暫停并且不會被釋放,實際是個新activity壓棧過程,然后新的activity開始,應該是onCreate然后onStart,我打印語句寫錯了,細心朋友應該看到了,當舊的activity不可見時,調用其onStop方法)

再按返回鍵回到ActivityDemoActivity

(返回后,處于棧頂的activity01會執行彈棧操作,顯示將會被destroy)

再按返回鍵 回到桌面

其實并不復雜的東邪寫的有些長了,但是基本上的顯示了activity的完整的生命周期。

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久免费av| 国产91在线播放九色快色| 欧美在线视频一区二区| 欧美人在线视频| 中文字幕亚洲欧美在线| 国产精品成人免费电影| 亚洲老板91色精品久久| 午夜精品一区二区三区av| 久久手机精品视频| 2023亚洲男人天堂| 97精品在线视频| 久久人人爽人人爽人人片亚洲| 国精产品一区一区三区有限在线| 国产激情视频一区| 国产亚洲精品91在线| 成人中文字幕+乱码+中文字幕| 国产成人91久久精品| 欧美日韩国产精品一区| 亚州av一区二区| 欧美激情aaaa| 色综合久久中文字幕综合网小说| 久久久久九九九九| 久久精品成人一区二区三区| 色综合久久久888| 亚洲成人精品久久| 亚洲国产精彩中文乱码av在线播放| 欧洲日本亚洲国产区| 日韩美女视频免费在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 精品亚洲男同gayvideo网站| 亚洲欧美国产日韩中文字幕| 亚洲乱码国产乱码精品精天堂| 搡老女人一区二区三区视频tv| 欧美一性一乱一交一视频| 久久理论片午夜琪琪电影网| 91精品成人久久| 97香蕉超级碰碰久久免费的优势| 亚洲成人aaa| 57pao国产成人免费| 富二代精品短视频| 一区二区成人av| 亚洲国产精品一区二区三区| 国产精品福利观看| 亚洲午夜未满十八勿入免费观看全集| 国产精品人成电影| 久久琪琪电影院| 久久久最新网址| 亚洲欧美综合另类中字| 亚洲人成在线观看| 91国内精品久久| 欧美猛少妇色xxxxx| 国产亚洲欧洲高清一区| 国产91ⅴ在线精品免费观看| 欧美激情国内偷拍| 欧美成人高清视频| 欧美成人精品h版在线观看| 亚洲福利视频网| 亚洲精品久久久久久下一站| 国产97在线|日韩| 午夜精品美女自拍福到在线| 亚洲国产精品人久久电影| 亚洲天堂第二页| 国内偷自视频区视频综合| 成人乱色短篇合集| 亚洲黄色www| 国产999在线| 91九色在线视频| 亚洲一区二区国产| 国产做受高潮69| 欧美一级大片在线观看| 91精品国产自产91精品| 最近2019中文免费高清视频观看www99| 亚洲国产精彩中文乱码av在线播放| 国产精品日本精品| 欧美一级大片在线免费观看| 亚洲日韩中文字幕在线播放| 国产精品稀缺呦系列在线| 色樱桃影院亚洲精品影院| 国语对白做受69| 黑丝美女久久久| 一区二区福利视频| 中文字幕精品国产| 国产精品视频白浆免费视频| 亚洲国产成人精品久久久国产成人一区| 永久免费看mv网站入口亚洲| 国产成人在线播放| 乱亲女秽乱长久久久| 91精品视频免费观看| 日韩精品福利网站| 久久久久免费视频| 日韩中文在线中文网三级| 亚洲伊人一本大道中文字幕| 日韩精品极品在线观看| 青青草99啪国产免费| 日韩的一区二区| 国产精品精品一区二区三区午夜版| 欧美午夜影院在线视频| 亚洲欧美激情精品一区二区| 欧美xxxwww| 国产成人精品网站| 欧美精品久久久久久久免费观看| 成人国产精品日本在线| 国产精品久久9| 欧美激情亚洲激情| 亚洲激情小视频| 69视频在线免费观看| 日韩综合视频在线观看| 91精品在线国产| 日韩在线免费视频观看| 2018日韩中文字幕| 日韩中文字幕在线视频播放| 欧美性xxxxxx| 91精品国产高清久久久久久| 日本精品一区二区三区在线播放视频| 欧美性猛交xxxx黑人| 成人免费看片视频| 日韩电影在线观看永久视频免费网站| 亚洲成人精品久久| 另类少妇人与禽zozz0性伦| 激情久久av一区av二区av三区| 亚洲人成电影网站色www| 亚洲一区二区三区四区视频| 国模叶桐国产精品一区| 欧美精品少妇videofree| 久热爱精品视频线路一| 国产精品久久精品| 亚洲第一精品电影| 日韩精品在线影院| 国产亚洲一区精品| 午夜精品99久久免费| 奇米成人av国产一区二区三区| 一区二区三区精品99久久| 亚洲欧美综合另类中字| 久久免费高清视频| 国产一区二区三区在线观看网站| 国产在线精品一区免费香蕉| 国产一区二区三区丝袜| 亚洲精品中文字幕女同| 91在线直播亚洲| 欧美精品福利在线| 久久精品国产一区二区三区| 国产精品青草久久久久福利99| 国产精品aaaa| 国产一区二区三区视频| 精品日本美女福利在线观看| 日本一区二区在线免费播放| 精品国产区一区二区三区在线观看| 性欧美xxxx视频在线观看| 日韩大胆人体377p| 国产精品久久久久久久电影| 欧美高清视频在线| 欧美一区二区三区图| 欧美大片在线免费观看| 亚洲成年人在线播放| 国产精品草莓在线免费观看| 久久视频免费在线播放| 亚洲一区999| 欧美肥臀大乳一区二区免费视频| 欧美最顶级丰满的aⅴ艳星| 久久久免费精品| 成人黄色在线播放| 久久综合九色九九| 久久91精品国产91久久跳| 欧美日韩在线视频一区|