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{@Overrideprotected 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() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(FirstActivity.this, SecondActivity.class);// 启动SecondActivitystartActivity(intent);// 关闭当前的Activityfinish();}});}}
SecondActivity.java,功能也相同,点击按钮跳转到第一个Activity。
public class SecondActivity extends Activity {@Overrideprotected 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() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(SecondActivity.this, FirstActivity.class);// 启动SecondActivitystartActivity(intent);// 关闭当前的Activityfinish();}});}}
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经典项目案例开发实战宝典>



更多相关文章

  1. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  2. Android(安卓)拨号器的简单实现
  3. Android系统配置数据库注释(settings.db)
  4. android用户界面之按钮(Button)教程实例汇
  5. Android开发环境搭建
  6. android 分辨率及密度详细
  7. Android屏幕常亮
  8. Android(安卓)屏幕设置
  9. android调用setRequestedOrientation之后

随机推荐

  1. android 中的 Handler Thread Runnable
  2. java第四次实验
  3. Android(安卓)ImageView的scaleType属性
  4. Android(安卓)Duplicate files copied in
  5. EditText属性详解
  6. 【Android(安卓)应用开发】 Ubuntu 安装
  7. android 模拟抢红包 原理
  8. Android——init.rc脚本
  9. 探讨android图片资源的抖动处理和格式转
  10. Android中ExpandableListView控件基本使