Android系统开发01—Android基本组件

ALDRIDGE 2011-04-26

Android系统开发01—Android基本组件

1.应用程序生命周期

应用程序进程从创建到结束的全过程便是应用程序的生命周期。与其他系统不同,Android应用程序的生命周期是不受进程自身控制的,而是由Android系统决定的。

Android系统将所有的进程分为5类进行管理:

1.前台进程

2.可见进程:还在屏幕中,但是用户并没有直接与之进行交互。

3.服务进程

4.后台进程

5.空进程

从1到5,重要顺序递减。

注意:应用程序在运行时,其状态的切换可能是通过自身实现的,可也能是系统将其改变的。

2.Activity

Activity是Android中最常用的组件,是应用程序的表示层,Activity一般通过View来实现应用程序的用户界面,相当于一个屏幕,用户与程序的交互式通过该类实现的。

Activity的生命周期主要包含三个状态:运行态,暂停态,停止态。

Activity的显示内容跟是由View对象提供的,View对象继承自View类,其中每个View对象管理屏幕中的一个矩形区域。Android自带了许多View对象,而除了使用Android自带的View外,还可以自定义View。

例子:

MyView.java:
package qijia.si;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class MyView extends View {
	Paint paint;
	public MyView(Context context){
		
		super(context);
		paint = new Paint();
		paint.setColor(Color.WHITE);
		paint.setTextSize(20);
		paint.setAntiAlias(true);
			
	}
	protected void onDraw(Canvas canvas){
		
		super.onDraw(canvas);
		canvas.drawColor(Color.GRAY);
		canvas.drawRect(10,10,110,110, paint);
		canvas.drawText("fuck you", 60, 170, paint);
		
		
	}
}
MyAndroidProject.java:
package qijia.si;

import android.app.Activity;
import android.os.Bundle;

public class MyAndroidProject extends Activity {
    /** Called when the activity is first created. */
	MyView myView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView = new MyView(this);
        this.setContentView(myView);
    }
}
3. Service

Service是一个具有较长的生命周期但是并没有用户界面的程序。

Service一般由Activity启动,但不依赖于Activity,Service有两种启动方式:

1.startService

当Activity调用startService方法启动Service时,会依次调用onCreate和onStart方法来启动Service。当结束时,调用onDestroy方法结束Service。

2.bindService

BoardReceiver

BoardReceiver为用户接收广播通知的组件,当系统或某个应用程序发送广播时,可以使用BoardReceiver组件来接收广播信息并作出相应的处理。

使用过程:

1.将需要广播的消息封装到Intent中。

2.Context.sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast()中的一种将Intent发送

3.通过IntentFilter对象过滤所发送的实体Intent

4.重写onReceive方法的BoardReceiver。

4.ContentProvider

ContentProvider是用来实现应用程序之间数据共享的类。

5.Intent和IntentFilter

1)Intent类简介

Intent是一种运行时绑定机制,在应用程序运行时连接两个不同的组件。一般的应用是通过Intent向Android系统发出某种请求,然后Android系统会根据请求查询各个组件声明的IntentFilter,找到需要的组件并运行它。

前面所说的Activity,Service及BroadcastReceiver组件之间的通信全部使用的是Intent但是每个机制不同。

Activity组件:当需要激活一个Activity组件时,需要调用Context.startActivity或Context.startActivityForResult方法来传递Intent,此时的Intent参数成为ActivityActionIntent

Service组件:一般通过Context.startService和Context.bindService

BroadcastReceiver组件:上面已经介绍

Intent是由组件名称,Action,Data,Category,Extra和Flag组成:

1.组件名称:组件名称实际上就是一个ComponentName对象,用于标识唯一的应用程序组件。

2.Action:一个描述Intent所触发动作名称的字符串。如

ACTION_CALL,ACTION_EDIT,ACTION_VIEW,ACTION_MAIN等

3.Data:主要对Intent消息中数据的封装,主要描述Intent的动作所操作到的数据的URI及类型

4.Category:是对目标组件类型的描述

5.Extra:封装了一些额外的附加信息。

2)IntentFilter

IntentFilter实际上相当于Intent的过滤器。IntentFilter过滤Intent时,主要通过Action,Data及Category三方面进行监测:

1.检查Action:一个Intent只能设置一种Action,但是一个IntentFilter却可以设置多个Action过滤。当IntentFilter设置了多个Action时,只需一个满足就可完成Action验证。

2.检查Data:主要检查URI及数据类型

3.检查Category:当Intent中的Category与IntentFilter中的一个Category完全匹配时,便会通过Category检查。

Intent案例:

判断输入的电话号码是否符合规范当符合规范时,调用系统自带的拨号程序进行拨号。

package qijia.si;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.PhoneNumberUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MyAndroidProject extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);
        Button bCall = (Button)this.findViewById(R.id.Button01);
        bCall.setOnClickListener(
        		new View.OnClickListener() {		
					public void onClick(View v) {
						// TODO Auto-generated method stub
						EditText eTel = (EditText) findViewById(R.id.myEditText);
	        			String strTel = eTel.getText().toString();
	        			if(PhoneNumberUtils.isGlobalPhoneNumber(strTel)){
	        				Intent i = new Intent(Intent.ACTION_DIAL,Uri.parse("tel://"+strTel));
	        				MyAndroidProject.this.startActivity(i);
	        				
	        				
	        			}else{
	        				Toast.makeText(
	        						MyAndroidProject.this,
	        						"号码格式不正确",
	        						5000
	        				
	        				).show();
					}
				}
        		}
        		);
				     	
        
    }
}

相关推荐