簡單的Activity的生命週期
必須調用的三個方法:onCreate()------------->onStart()--------------------->onResume().,用AAA表示
AAA-->onFreeze()-------------->onPause()---------------->onStop()----------->onRestart()------------>onStart(),onResume()..
2)用戶點擊Home,Activity調用順序如下
AAA------>onFreeze()-------------->onPause()-------->onStop()------->Maybe----------->onDestroy----Maybe-->
3)調用 finish(),Activity調用順序如下AAA---->onPause()----->onStop()---->onDestory();
4)在Activity上顯示dialog,Activity調用順序如下 AAA
5)在父Activity上顯示透明的或非全屏的Activity,Activity調用順序如下
void onCreate(Bundle saveInstanceState) 、void onstart() 、void onRestart() 、void onResume()、void onPause()、void onstop()、
void onDestroy();這個七個方法定義了Activity的完整生命週期。實現這些方法可以幫助我們監視其中三個嵌套生命週期循環;
Activtiy的完整生命週期自第一次調用onCreate()開始,直至調用onDestroy()爲止。Activity在onCreate中設置所有的
全局狀態完成初始化,而在onDestroy()中釋放所有系統資源。例如:如果
Activity有一個線程在後臺運行從網絡下載數據,它會在onCreate()創建線程,而在onDestroy()銷燬線程。
Activity的可視生命週期自onStart()調用開始直到相應的onstop()調用結束。在此期間,用戶可以在Activity,儘管它也許不是位於前臺
或者也不許進行交互。在這兩個方法之間,我們可以保留用來向用戶顯示這個Activity所需的資源。
引入 廣播
onStart()中註冊一個 BroadcastReceiver來監控會影響UI的變化,而在onStop()中來注消。
理解註冊廣播的幾種方式,這些方式有何缺點?請談談Android引入廣播機制的用意。
在Android下,想要接收廣播信息,那麼廣播接收器就得我們自己來實現了,我們可以繼承BroadcastReceiver,就可以
有一個廣播接收器了。有個接收器還不夠,我們還得重寫BroadcastReceiver裏面的onReceiver方法,當來廣播的時候我們要幹
什麼,這就要我們自己來實現,不過我們可以搞一個信息防火牆,具體的代碼:
public class SmsBroadCastReceiver extends BraodcastReceiver{
@override
public void onReceive(Context context,Intent intent){
Bundle bundle = itent.getExtras();
Object[] object=(Object)bundle.get("pdus");
SmsMessage sms[]=new SmsMessage[object.length];
for(int i=0;i<object.length;i++){
sms[0]=SmsMessage.createFromPdu();
Toast.makeText(context,"來自"+sms[i].getDisplayOriginatingAddress()+"的消息是:"+sms[i].getDisplayMessageBody,
Toast.Length_SHOT).show();
}
//終止廣播,在這裏我們可以稍微處理,根據用戶輸入的號碼可以實現短信防火牆
abortBroadCast();
}
}
//當實現了廣播接收器,還要設置廣播接收器接收廣播信息的類型,這裏是信息:
Android.provider.Telephony.SMS_RECEIVED
我們就可以把廣播接收器註冊到系統裏面,可以讓系統知道我們有個廣播接收器。這裏有兩種,一種是代碼的動態註冊:
//生成廣播處理
smsBroadCastReceiver =new smBroadCaseReceiver();
//實例化過濾器並設置要過濾的廣播
IntentFilter intentFilter= new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
//註冊廣播
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,intentFilter);
一種是AndroidManifest.xml中配置廣播
<?xml version="1.0" encoding="utf-8">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="spl.broadCastReceiver"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android;name=".BroadCastReceiverActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android:itent.action.MAIN"/>
<categroy android:name="android.intent.category.LAUNCHER"/>
</intent-filter>