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
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之 Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android 四大组件之Activity
- android 四大组件之activity
- Android 四大组件之 Activity
- android四大组件之Activity
- 自定义控件是把dp转化成px
- 用Wireshark简单分析HTTPS传输过程-抓包过程
- 分页技术总结
- java自定义注解入门(1)
- Objective-c语言_委托模式
- Android四大组件之Activity
- 虚拟现实游戏的十大误区
- 文章标题
- spring+hibernate事务的两种方式
- Android 当overridePendingTransition遇见了Fragment
- java 异常捕捉 ( try catch finally )
- Ubuntu 12.04 alternate 64位 执行文件,显示:bash: ***: No such file or directory
- 正则表达式大全
- 同是天涯淪落人