Android四大组件

来源:互联网 发布:软件对比分析 编辑:程序博客网 时间:2024/06/08 08:28

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();
}

}

源码下载地址:http://download.csdn.net/detail/weimo1234/8420241

0 0
原创粉丝点击