什么是activity
Activity是安卓四大組件之一(還有Service、BroadcastReceiver、ContentPRovider)
acivity的生命周期如下:
onCreate:Activity創建的時候被調用onStart:Activity能被用戶看見,但是沒有獲得焦點onResume:Activity獲得焦點,此時Activity成為前臺ActivityonPause:Activity失去焦點,但是依然可見onStop:Activity不可見,此時Activity成為后臺ActivityonDestroy:Activity被銷毀內存不足時,系統會優先殺死后臺Activity所在的進程,都殺光了,如果內存還是不足沒那么就會殺死在暫停狀態的Activity所在的進程,如果還是不夠,有可能殺死前臺進程。如果有多個后臺進程,在選擇殺死目標時,采用最近少用使用算法(LRU)
1.啟動Activity:系統會先調用onCreate方法,然后調用onStart方法,最后調用onResume,Activity進入運行狀態。2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居后臺:系統會先調用onPause方法,然后調用onStop方法,進入停滯狀態。5.用戶后退回到此Activity:系統會先調用onRestart方法,然后調用onStart方法,最后調用onResume方法,再次進入運行狀態。6.當前Activity處于被覆蓋狀態或者后臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而后用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。7.用戶退出當前Activity:系統先調用onPause方法,然后調用onStop方法,最后調用onDestory方法,結束當前Activity。
參考代碼如下(通過兩個activity之間的跳轉來查看activity的生命周期):
創建第一個activity
<RelativeLayout 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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第一個activity" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳轉" android:onClick="click" /></RelativeLayout>package com.ldw.lifecycle;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); System.out.println("onCreate方法被調用"); } @Override protected void onStart(){ super.onStart(); System.out.println("onStart方法調用"); } @Override protected void onResume(){ super.onResume(); System.out.println("onResume方法調用"); } @Override protected void onPause(){ super.onPause(); System.out.println("onPause方法調用"); } @Override protected void onStop(){ super.onStop(); System.out.println("onStop方法調用"); } @Override protected void onDestroy(){ super.onDestroy(); System.out.println("onDestroy方法調用"); } @Override protected void onRestart(){ super.onRestart(); System.out.println("onRestart方法調用"); }}創建第二個activity
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第二個activity" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳轉到第一個activity" android:onClick="click1" /></LinearLayout>package com.ldw.lifecycle;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); System.out.println("第二個onCreate方法被調用"); } public void click1(View v){ Intent intent = new Intent(this, MainActivity.class); startActivity(intent); } @Override protected void onStart(){ super.onStart(); System.out.println("第二個onStart方法調用"); } @Override protected void onResume(){ super.onResume(); System.out.println("第二個onResume方法調用"); } @Override protected void onPause(){ super.onPause(); System.out.println("第二個onPause方法調用"); } @Override protected void onStop(){ super.onStop(); System.out.println("第二個onStop方法調用"); } @Override protected void onDestroy(){ super.onDestroy(); System.out.println("第二個onDestroy方法調用"); } @Override protected void onRestart(){ super.onRestart(); System.out.println("第二個onRestart方法調用"); }}Activity啟動模式標準模式:默認就是,不用設置singleTop:如果站定已經是該activity,就無法再啟動,如果棧頂不是,那么就會啟動。singleTask:如果該activity沒有啟動過,會啟動并跳轉到該activity,即該activity會出現在棧頂,如果該activity啟動過,但不在棧頂,那么再次啟動時會返回到該activity,即把該activity上方所有的activity都銷毀。對于singleTask的activity,在任務棧中,永遠只有一個該activity實例。singleInstance:該activity啟動時,會在新的任務站中啟動,并且只會啟動一次,以后再啟動該activity時,其實知識把該activity所在的任務棧移動到前臺。單例模式的activity,內中永遠只有一個,10個應用啟動單例模式的activity,都只是把該activity所在的任務棧移動到前臺。android橫豎屏切換的時候會觸發生命周期的方法,設置一下可以不用出發生命周期的方法android:configChanges="orientation|keyboardHidden|screenSize"orientation:水平豎直切換的時候不觸發生命周期方法keyboardHidden:鍵盤影藏的時候不觸發生命周期的方法screenSize:屏幕大小變化的時候不觸發生命周期的方法。參考博客:http://blog.csdn.net/liuhe688/article/details/6733407
新聞熱點
疑難解答