Android四大组件之Activity

来源:互联网 发布:监控平台的端口号 编辑:程序博客网 时间:2024/06/05 14:39

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经典项目案例开发实战宝典>



0 0
原创粉丝点击