简单的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>