一、什么是Activity?

Activity简单的说就是一个接口。我们是Android手机上看到的每个界面就是一个activity。

二、Activity的创建

1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注冊activity。这个activity就创建成功了。

public class MyActivity extends Activity {

}

2.清单文件注冊activity

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.study.MainActivity"
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.yang.study.MyActivity" >
</activity>
</application>

当中MainActivity就是程序启动的activity,这点能够从intent-filter的action能够看出

我们自定义的activity就是以下的MyActivity

 <intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

特别说明的一点:每个应用程序事实上能够在launcher也就是android手机的启动器中创建多个图标,仅仅须要在activity中配置上面这个intent-filter就可以,当然一般没人这么干。多个应用图标easy引起用户的困扰。

三、Activity的启动

既然应用程序仅仅有一个启动的入口,那么其它activity怎样启动呢?

activity的启动也有两种方式,第一种是显示启动,另外一种是隐式启动

a.activity的显示启动

显示启动就是在创建意图(intent)的时候指定要启动的类

1.创建意图

2.startActivity(intent)

能够用setclass方法指定类

Intent intent = new Intent();
intent.setClass(MainActivity.this, MyActivity.class);
startActivity(intent);

或setclassname 指定类名

Intent intent = new Intent();
intent.setClassName(MainActivity.this, "com.yang.study.MyActivity");
startActivity(intent);

也能够直接构造intent的时候指定类

Intent intent = new Intent(MainActivity.this, MyActivity.class);
startActivity(intent);

这三种形式都能够显示启动activity

tips:假设想在一个应用程序中启动其它应用程序的activity,能够做得到吗?

答案是能够的。仅仅要被启动的activity在清单文件的配置中的export属性设置为true。那么在其它应用程序中就能够启动它,方法例如以下:

Intent intent = new Intent();
intent.setClassName("com.yang.demo", "com.yang.demo.MainActivity");
startActivity(intent);

setClassName方法第一个參数是要启动的应用程序的包名。第二个參数是要启动的类名

b.activity的隐式启动

隐式意图就是在启动的时候不指定要启动的类。而是通过动作action和数据data的匹配来启动activity

eg.隐式启动打电话界面

Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel://18888009988"));
startActivity(intent);

隐式启动浏览器:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
<span style="font-family: Arial, Helvetica, sans-serif;">startActivity(intent);</span>

上面的两个样例都是启动系统自带的一些界面,关于系统默认界面,还有非常多。能够去參考网上的资料,因为篇幅所限,这里就不一一列举了。

假设我们的activity是一个浏览器工具。当我们使用上面的隐式启动浏览器的时候,我们也希望自己的activity被启动,该怎样处理呢?

这个时候。我们仅仅需在avtivity清单文件里设置intent-filter意图过滤器,当我们使用上面的隐式启动浏览器的方法,我们自定义的activity也将同一时候被启动。

样例例如以下:

<activity
android:name="com.yang.study.MyActivity"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" /> <data android:scheme="http" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

在清单文件里设置intent-filter  scheme參数限定为http 这样就能够拦截全部动作为android.intent.action.VIEW data为http开头的意图了。

当我们通过隐式意图启动activity的时候,我们自己的activity也会被启动

	Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3NyX3lhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

四、activity的显示

activity是一个个用户看到的界面,那么我们怎么定义要看到的内容的,非常easy,在activity的oncreat()方法,在里面就能够设置我们要显示的内容

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

setContentView()方法设置用户要显示的界面,当中放入要显示的ayout布局文件就可以

五、activity的关闭

acitivty关闭直接调用activity的finish()方法就可以

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
finish();
}

这篇文章简单的介绍了下activity的启动与关闭,重点内容就是显示和隐式两种启动方式了,实际使用中出现的频率也非常高,非常有必要掌握。

Android学习路径——Android的四个组成部分activity(一)的更多相关文章

  1. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

  2. Android学习路径(四)文件项目学习的名单,android显示单元经常使用的

    1.的该项目文件所谓名单AndroidManifest.xml文件.该文件,但有很大的利用,例:app名字.图标,app支持的版本app等等.以下我就介绍下这个清单文件的各个參数的作用. <ma ...

  3. 【转】 Pro Android学习笔记(八四):了解Package(3):包间数据共享

    目录(?)[-] 共享User ID的设置 共享资源例子 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowing ...

  4. 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

    目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...

  5. Android学习笔记(十四)

    Android中的数据存储 数据持久化就是指那些内存中的瞬时数据保存到存储设备中.Android系统中主要提供了三种方式用于简单地实现 数据持久功能,即文件存储.SharedPreferences存储 ...

  6. 【转】 Pro Android学习笔记(九四):AsyncTask(3):ProgressDialog

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Progress Dialog小例子 我们 ...

  7. 【转】 Pro Android学习笔记(六四):安全和权限(1):签发apk

    目录(?)[-] Android安全模型 数字证书签发 Debug的keystore 生产unsigned的apk 为apk进行证书签发 align安装包 使用Export Wizard生成签发的ap ...

  8. 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制

    目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...

  9. android 学习随笔二十四(动画:帧动画)

    帧动画,一张张图片不断的切换,形成动画效果 * 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 * FrameAnimatio ...

随机推荐

  1. linux sdio card睡眠治疗 sdio card removed解决方案

    近期调试几款sdio card suspend时都会出现sdio card removed,之后 要么死机要么模块不能正常工作.根本原因也就是休眠没有处理好.昨天最终找到了 解决方法. 1:host端 ...

  2. hello nodejs

    文章1一步:下载.安装文件 打开nodejs官方网站http://www.nodejs.org/download/ .选择须要的版本号.直接打开.默认安装就可以 第二步:编写測试代码: var htt ...

  3. 怎么在android的XML文件里加入凝视

    android的XML文件凝视一般採用 <!--凝视内容 -->的方式进行 在XML中,形如    <Button           />      的表示方式,当中&quo ...

  4. Java多线程之Lock的使用(转)

    package thread.lock; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execut ...

  5. POJ 2996 &amp; 2993 国际象棋布局 模拟

    Description Your task is to read a picture of a chessboard position and print it in the chess notati ...

  6. JAVA学习第六十二课 — TCP协议练习

    通过练习掌握TCP在进行传输过程中的问题 练习1:创建一个英文大写转换server client输入字母数据,发送给服务端,服务端收到后显示到控制台,并将该数据转成大写返回client,知道clien ...

  7. 使用ExpandableListView时间轴效果达到

    不废话,首先在地图上,查看结果 这是用ExpandableListView来实现时间轴效果,原理比較简单,以月份为第一级,以天为第二级来实现的. package com.hj.main; import ...

  8. 我的MYSQL学习心得(五)

    原文:我的MYSQL学习心得(五) 我的MYSQL学习心得(五) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...

  9. NET 领域驱动设计实战系列总结

    NET 领域驱动设计实战系列总结 一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核 ...

  10. linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,日本再战!)

    linux 3.4.103 内核移植到 S3C6410 开发板 这个星期差点儿就搭在这里面了,一開始感觉非常不值得,移植这样的浪费时间的事情.想立刻搞定,然后安安静静看书 & coding. ...