Android四大组件

来源:互联网 发布:人工智能自然语言理解 编辑:程序博客网 时间:2024/05/01 22:06
Android四大组件1.Activity,一般一个界面就是一个Activity,显示一些控件或者监听一些动作,完成一些事件,我把它看成一个容器。Activity的注册,在AndroidManifest.xml 中注册。注册语句
<activity android:name=".ui.wizard.Account" android:label="Account wizard" />    Activity之间可通过Intent进行通信。注册时可以可以通过IntentFilter定义Activity的动作,`    AndroidManifest文件中含有如下过滤器的Activity组件为默认启动类当程序启动时系统自动调用它。<intent-filter>       <action android:name="android.intent.action.MAIN" />       <category android:name="android.intent.category.LAUNCHER" /></intent-filter>

主要Action包括MAIN(activity的门户)、VIEW、PICK、EDIT 等。
Activity的生命周期,回调函数包括OnCreate,OnResum,OnPause,Onstop等,每一个生命周期调用相应的回调函数,可以在回调函数中规定动作等。
从一个Activity中启动另外一个Activity。一般启动。`

Intent intent=new Intent(firstActivity.this,secondActivity.class);startActivity(intent);

第二种启动方法,startActivityForResult(Intent intent,int requestCode),以指定的请求码(requestCode)启动Activity,而且第一个Activity得到新启动的Activity的启动结果,可以完成相应的动作(通过onActivityResult方法获取)。
onActivityResult(int requestCode,int resultCode,Intent intent);
启动

Intent intent=new Intent(firstActivity.this,secondActivity.class);startActivity(intent,0);//

firstActivity中重写onActivityResult(int requestCode,int resultCode,Intent intent);当第二个Activity启动时,该函数会被调用。

@override
public void
onActivityResult(int requestCode,int resultCode,Intent intent)
{
if(requestCode==0&&resultCode==0)
{};
}

在第二个Activity中如下代码

Intent intent=getIntent();secondActivity.setResult(0,intent);

Activity的生命周期,四个状态
》活动状态:位于前台,用户可见且有焦点。
》暂停状态:位于前台但是不能获取焦点。
》停滞状态:失去焦点,不可见。
》销毁状态:Activity结束。进程结束

Activity的四种加载模式
》standard模式:标准模式,默认的加载模式–Android总会为目标Activity创建一个新的视力并添加到Task栈中
》singleTop模式:当将要被启动的Activity位于栈顶时系统不会重新创建Activity实例
》signalTask模式:Activity存在但是并没有位于栈顶系统将其他顶上的Activity移除Task
》signalInstance模式:如果将要启动的Activity不存在,系统将会重新创建一个全新的Task,,再创建Activity实例,并加入栈顶。若将要启动的目标Activity已经存在,无论位于哪个Task中。系统就将该Activity的Task转入前台。
注册时代码代码

android:launchMode="singleInstance"

2.BroadcastReceive,Android广播机制
广播并没有界面,但是可携带信息,可将信息用于Activity或者Service,或者通知用户的
广播分两种,
1.普通广播
通过Context.sendBroadcast(Intent intent)发送。
2.有序广播
通过Context.sendOrderedBroadcast(intent, receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高;广播接收者接收广播时的级别级别(可通过intentfilter中的priority进行设置设为2147483647时优先级最高),同级别接收的先后是随机的, 再到级别低的收到广播,高级别的或同级别先接收到广播的可以通过abortBroadcast()方法截断广播使其他的接收者无法收到该广播,还有其他构造函数
3.异步广播
异步广播,通过Context.sendStickyBroadcast(Intent myIntent)发送的,还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要: 权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动把它去掉
注意:发送广播时的intent参数与Contex.startActivity()启动起来的Intent不同,前者可以被多个订阅它的广播接收器调用,后者只能被一个(Activity或service)调用
(http://blog.csdn.net/dlutbrucezhang/article/details/8577653)
注册广播

     静态注册,注册的广播,下面的priority表示接收广播的级别"2147483647"为最高优先级<receiver android:name=".SMSBroadcastReceiver" >  <intent-filter android:priority = "2147483647" >    <action android:name="android.provider.Telephony.SMS_RECEIVED" />  </intent-filter></receiver >动态注册,一般在Activity可交互时onResume()内注册BroadcastReceiverIntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");registerReceiver(mBatteryInfoReceiver ,intentFilter);//反注册unregisterReceiver(receiver);

然后在写一个类继承BroadcastReceiver,复写OnReceive方法

0 0
原创粉丝点击