Android中的四大组件指的是Activity(活动,就是我们所能够看到的界面),ContentProvider(内容提供者,通常用来数据共享,要和uri一起使用),Service(服务,与Activity特别相似,当不需要和用户进行页面交互时可优先考虑,通常用在后台播放音乐和天气预报等等),BroadcastReceiver(广播接收者,可实现组件间的通信)。

一、Activity

Activity是Android开发中最常用的组件之一,一个应用程序通常由若干个Activtiy组成。

1.建立
通常是新建一个类并继承Activity或其子类,并实现OnCreate()方法如
public class MainActivity extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
     }
 }2.配置
在 <application> </application>中加入  
<activity android:name="com.example.test1.MainActivity"></activity>
如果该Activtiy作为启动Activtiy就加上
<intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 </intent-filter>3.生命周期


                  
4.启动与关闭
4.1 不带返回结果的启动
Intent intent=new Intent(A.this,B.class);
startActivity(intent);
finish();
4.2 带返回结果的启动
Intent intent=new Intent(A.this,B.class);
startActivity(intent,Integer);
 
finish(Integer);


下例演示了带返回结果的启动,本例中调用了系统的拨打电话的界面,故要加上权限

 <uses-permission android:name="android.permission.CALL_PHONE" />

MainActivtiy:
public class MainActivity extends Activity {
private EditText editText;
private Button btn;
private Intent intent;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
intent = new Intent(MainActivity.this, ContactActivity.class);
startActivityForResult(intent, 1);
}
});
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == 2) {
String phone = data.getStringExtra("phone");
editText.setText(phone);
Uri uri=Uri.parse("tel:"+phone);
data = new Intent(Intent.ACTION_DIAL,uri);
startActivity(data);
}
}
 }activity_main:
<LinearLayout 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:orientation="vertical" >


     <EditText
         android:id="@+id/editText"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:inputType="number"
         android:labelFor="@id/editText" />


     <Button
         android:id="@+id/btn"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/btn"
         android:textSize="@dimen/textSize" 
         android:layout_gravity="center_horizontal"/>


 </LinearLayout>ContactActivity:
public class ContactActivity extends Activity {
private ListView listView;
private String[] phone = { "1111", "2222", "3333", "4444", "5555", "6666",
"7777", "8888", "9999" };
     private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new ArrayAdapter<String>(ContactActivity.this,
android.R.layout.simple_list_item_1, phone));
intent=getIntent();
listView.setOnItemClickListener(new OnItemClickListener() {


@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
intent.putExtra("phone", phone[position]);
setResult(2, intent);
finish();
}
});
}
 }list:
<?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" >


     <ListView
         android:id="@+id/listView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" >
     </ListView>


 </LinearLayout>

二、ContentProvider

自定义ContentProvider

1.创建

和Activtiy一样,都是创建一个类并继承ContentProvider,并实现相关方法,如下所示

public class MyContentProvider extends ContentProvider {


@Override
public boolean onCreate() {
// TODO Auto-generated method stub
return false;
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
return null;
}


@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}


@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
return null;
}


@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}


@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}


 }2.Uri简介
例如
content://com.example.MyContentProvider/word
content://相当于http://
com.example.MyContentProvider代表指定的ContentProvider

word代表资源部分

3.配置

如下所示

<provider
             android:name="com.example.test1.MyContentProvider"
             android:authorities="com.example.MyContentProvider"
             android:exported="true" ></provider>

4.使用

主要是要与ContentResolver一起使用

ContentResolver contentResolver=getContentResolver();

ContentResolver所操作的增删改查方法实际上是操作ContentResolver所对应的方法

系统ContentProvider

在平时的开发中,系统ContentProvider用的比较多,主要由以下几种

联系人Uri:  ContactsContact.Contacts.CONTENT_URI

联系人电话Uri: ContactsContact.CommonDataKinds.Phone.CONTENT_URI

联系人E-mail Uri:ContactsContact.CommandDataKinds.Email.CONTENT_URI

其实这些可以理解为数据库中的列,然后通过游标的移动即可得到相关数据。

监听ContentProvider数据改变: ContentObserver

三、Service

自定义服务

1.创建
和之前一样,先先建一个类并继承Service或其子类(IntentService),并实现onBind()方法
如下所示
public class MyService extends Service {


@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}


 }2.配置
如下所示
 <service android:name="com.example.test1.MyService" >
  </service>3.启动和关闭
startService()当程序退出了,Service仍在运行。以stopService()结束。
bindService()当程序退出了,Service停止运行。以unbindService()结束。

4.生命周期


系统服务

其实Android中提供了大量的系统服务供开发者使用,

在使用之前先要获取服务的权限,如 TelephonyManager tm=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);其他也类似

主要有如下服务:

1.电话管理 TelephonyManager

2.短信管理 SmsManager 

3.音频管理 AudioManager

4.振动器  Vibrator

5.闹钟服务 AlarmManager

四、BroadcastReceiver

自定义广播

1.创建,和之前类似,如下所示

public class MyBroadcastReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub


}


 }

2.配置

<receiver android:name="com.example.test1.MyBroadcastReceiver" >
        </receiver>

3.发送广播

无序广播:sendBroadcast()

有序广播:sendOrderBroadcast()

系统广播

主要有时间改变,电量改变等等。