Android四大组件之Activity

Android四大组件之Activity

最近在看Android的书籍,所以有时间复习一下Android的四大组件。
Android开发四大组件分别是:
  • 活动(Activity):用于表现功能。
  • 服务(Service):后台运行服务,不提供界面呈现。
  • 广播接收器(BroadcastReceiver):用于接收广播。
  • 内容提供器(ContentProvider):支持在多个应用存储和读取数据,相当于数据库。
1.1 Activity
在Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity可以算是开发者遇到的最频繁,也是Android当中最基本的模块之一。在Android的程序当中,Activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么Activity就相当于一个网页。在activity当中可以添加以下Button、Checkbox等控件。可以看到Activity概念和网页的概念相当类似。
一般一个Android应用是由多个Activity组成的。这多个Activity之间可以进行相互跳转,例如,按下一个Button按钮之后,可能会跳转到其它的Activity。和网页跳转稍微有些不一样的是,Activity之间跳转可能有返回值。例如,从Activity A跳转到Activity B,那么当Activity B运行结束的时候,有可能返回给Activity A一个返回值。这样做在很多时候是相当方便的。
当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。我们可以选择性地移除一些没有必要保留的屏幕,因为Android会把每个应用从开始到当前的每个屏幕都保存在堆栈中。
Android用Intent这个特殊类实现在Activity与Activity之间的切换。Intent类用于描述应用的功能。在Intent的描述结构中,有两个最重要的部分;动作和动作对应的数据。典型的动作类型有:MAIN、VIEW、PICK、EDIT等,而动作对应的数据则以URI的形式表示。例如,要查看一个人的联系方式,需要创建一个动作类型为VIEW的Intent,以及一个表示这个人的URI。
通过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,Activity将会调用StartActivity(Intent my Intent)方法。然后,系统会在所有已安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的Activity。新的Activity接收到MyIntent的通知后,开始运行。当StartActivity方法被调用时,将触发解析MyIntent的动作,该机制提供了两个关键好处:
  • Activity能够重复利用从其它组件中以Intent的形式产生的请求。
  • Activity可以在任何时候被具有相同IntentFilter的新的Activity取代。
下面举例说明两个Activity之间的切换。新建两个Activity:FirstActivity和SecondActivity。FirstActivity.java代码如下所示,定义了一个按钮并为这个按钮绑定监听事件,当用户单击这个按钮时,将会切换到SecondActivity,同时关闭当前Activity。
public class FirstActivity extends Activity{
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 设置显示first的布局
		setContentView(R.layout.activity_first);
		// 取得布局first中的button1按钮
		Button btn = (Button) findViewById(R.id.button1);
		btn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(FirstActivity.this, SecondActivity.class);
				// 启动SecondActivity
				startActivity(intent);
				// 关闭当前的Activity
				finish();
			}
		});
	}
}
SecondActivity.java,功能也相同,点击按钮跳转到第一个Activity。
public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 设置显示first的布局
		setContentView(R.layout.activity_first);
		// 取得布局first中的button1按钮
		Button btn = (Button) findViewById(R.id.button1);
		btn.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(SecondActivity.this, FirstActivity.class);
				// 启动SecondActivity
				startActivity(intent);
				// 关闭当前的Activity
				finish();
			}
		});
	}
}
activity_first.xml 布局文件:
<?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" >

    <TextView 
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是FirstActivity"/>
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转到SecondActivity" />

</LinearLayout>
activity_second.xml布局文件:
<?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" >

    <TextView 
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是SecondActivity"/>
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳转到FirstActivity" />

</LinearLayout>
同时不要忘记在manifest.xml中注册activity:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Sn1.Widget.ActionMode" >
        <activity
            android:name=".FirstActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.example.demo.SecondActivity"/>
    </application>
</manifest>
以上内容都是通过看书所得,所以推荐大家可可以去看看,书名<Android经典项目案例开发实战宝典>



你可能感兴趣的:(android,Activity)