Android的四大组件分别是:
--Activity
--Service
--BroadcastReceiver
--Content Provider
一 Activity
Activity提供用户与应用程序交互的界面
1>继承Android的Activity类
2>重写onCreate方法
3>设置显示布局
4>在AndroidManifest文件中,注册Activity
Activity的三种状态
运行状态
暂停状态
停止状态
Activity的生命周期
onCreate();创建
onStart();运行
onResume():恢复,获取焦点
onPause();暂停,失去焦点
onStop();停止
onDestroy();销毁
onRestart();重启
代码验证:
public class MainActivity extends Activity {
private String TAG ="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* <pre>
* onCreate: (描述方法的作用.)
* </pre>
* @author: Administrator 2014-12-31
*/
protected void onCreate() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "MainActivity==>onCreate");
}
/**
* TODO 简单描述该重写方法的实现功能(可选).
* @author Administrator 2014-12-31
* @see android.app.Activity#onStart()
*/
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "MainActivity==>onStart");
}
/**
* TODO 简单描述该重写方法的实现功能(可选).
* @author Administrator 2014-12-31
* @see android.app.Activity#onResume()
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "MainActivity==>onResume");
}
/**
* TODO 简单描述该重写方法的实现功能(可选).
* @author Administrator 2014-12-31
* @see android.app.Activity#onPause()
*/
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "MainActivity==>onPause");
}
/**
* TODO 简单描述该重写方法的实现功能(可选).
* @author Administrator 2014-12-31
* @see android.app.Activity#onStop()
*/
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "MainActivity==>onStop");
}
/**
* TODO 简单描述该重写方法的实现功能(可选).
* @author Administrator 2014-12-31
* @see android.app.Activity#onDestroy()
*/
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "MainActivity==>onDestroy");
}
二 Service
1.Broadcast(广播)
是一种广泛运用的在应用程序之间传输信息的机制
2.BroadcastReceiver(广播接受者)
是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播。
3.用途:
当开机完成后系统会产生一条广播;
当网络状态改变时系统会产生一条广播;
当电池电量改变时,系统会产生一条广播;等。
4.使用方法:
发送:把信息装入一个Intent对象(如Action,Category)
通过调用相应的方法将Intent对象以广播的方式发送出去
>sendBroadcast()
>sendOrderBroadcast()
>sendStickyBroadcast()
接收:当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,
若匹配则就会调用BroadcastReceive的onReceiver()方法。所以当我们定义一个BroadcastReceiver的时候,
都需要实现onReceive()方法。
注意:BroadcastReceiver需要注册
静态注册
代码注册
#BroadcastReceiver生命周期只有不到十秒的时间
#在BroadcastReceiver里不能做一些耗时操作
#应该通过发送Intent给Service,由Service来完成
#不能用子线程
广播的种类:
普通广播(Normal broadcast)
所有坚挺该广播的广播接受者都可以监听到该广播。
有序广播(Ordered broadcast)
按照接受者的优先级顺序接受广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大,优先级越高。可以终止广播意图的继续传播。
接收者可以篡改内容。
异步广播(粘滞性滞留广播)
不能将处理结果传给下一个接收者,无法终止广播。
下面是一个小例子
public class MainActivity extends Activity {
private Button btnSend;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSend = (Button) findViewById(R.id.send);
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.putExtra("msg", "这是一条普通广播");
intent.setAction("BC_One");
sendBroadcast(intent);
}
});
}
}
=================================================
public class BC1 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String s = intent.getStringExtra("msg");
Log.i("info", "receiver1收到消息:" + s);
}
}
=====别忘了注册信息哦=======================
<receiver android:name="com.example.broadcastreceiverdemo.BC1">
<intent-filter >
<action android:name="BC_One"/>
</intent-filter>
</receiver>
三 ContentProvider
1.继承抽象类ContentProvider实现一系列针对于数据的增,删,改,查等方法;
2,需要在AndroidManifest.xml中完成对ContentProvider的注册。
ContentResolver:
使用ContentResolver操作ContentProvider中的数据:
当外部应用需要对ContentProvider中的数据进行增,删,改,查操作的时候,可以使用ContentResolver类来完成
使用Activity提供的getContentResolver()方法获取ContentResolver对象
这是一个获取手机通讯录的小程序:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ContentResolver cr = getContentResolver();
Cursor c = cr.query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null);
if (c!=null) {
while (c.moveToNext()) {
int id = c.getInt(c.getColumnIndex("_id"));
Log.i("info", "_id:" + id);
Log.i("info", "name:" + c.getString(c.getColumnIndex("display_name")));
Cursor c1 = cr.query(Phone.CONTENT_URI, new String[]{Phone.NUMBER,Phone.TYPE}, Phone.CONTACT_ID + "=" + id, null, null);
//根據聯繫人ID查詢出聯繫人的電話號碼
if (c1 != null) {
while (c1.moveToNext()) {
int type = c1.getInt(c1.getColumnIndex(Phone.TYPE));
if (type == Phone.TYPE_HOME) {
Log.i("info", "家庭電話" + c1.getString(c1.getColumnIndex(Phone.NUMBER)));
}else if (type == Phone.TYPE_MOBILE) {
Log.i("info", "移動電話:" + c1.getString(c1.getColumnIndex(Phone.NUMBER)));
}
}
c1.close();
}
//根據聯繫人的ID去查詢出聯繫人的郵箱地址
Cursor c2 = cr.query(Email.CONTENT_URI, new String[]{Email.DATA,Email.TYPE}, Email.CONTACT_ID + "=" + id, null, null);
if (c2 != null) {
while (c2.moveToNext()) {
int type = c2.getInt(c2.getColumnIndex(Email.DATA));
if (type == Email.TYPE_WORK) {
Log.i("info", "工作郵箱:" + c2.getString(c2.getColumnIndex(Email.DATA)));
}
}
c2.close();
}
}
c.close();
}
}