一、什么是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. Java在的时候,类定义HashSet初始化方法

    Java非常多的时间,应使用HashSet搜索功能,类的则定义,是HashSet类型的,我们定义数据成员之后,不好直接调用add函数来实现初始化,这个时候怎么办? 我们能够这样来做: public s ...

  2. C# LDAP 管理(创建新用户)

    今天用C#实现了一套LDAP域账号的创建和查询,感受挺多. 算是第一次接触LDAP吧,之前曾经做了一个登录的验证,就是查询功能,那个相对比较简单,用到了一个方法就搞定了. 这次的需求是要用编程的方式创 ...

  3. Nyoj 三国志(dijkstra+01背包)

    描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占的空城,但是这些空城中 ...

  4. jQuery自定义右键菜单

    首先看下效果,效果在最下面: 代码: body { font-size: 12px; margin: 0px; padding: 0px; } form,div,ul,li { margin: 0px ...

  5. .net设计模式之装饰模式

    概述: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装饰模式的特点: (1) 装饰对象和真实对象有相同的接口.这样 ...

  6. Eclipse 引导阮卓项目 No projects are found to import解

    我们指示import当项目.由于一些git项目不.project和.classpath档.因此,直接import当然不是现有项目. 下面是解决方式: 1. new Android Project里面换 ...

  7. 归并排序 & 快速排序

    归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有 ...

  8. poj 1679 The Unique MST 【次小生成树】【模板】

    题目:poj 1679 The Unique MST 题意:给你一颗树,让你求最小生成树和次小生成树值是否相等. 分析:这个题目关键在于求解次小生成树. 方法是,依次枚举不在最小生成树上的边,然后加入 ...

  9. WebService对跨域的支持

    WebService对跨域的支持 跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源, ...

  10. UIAppDelegate介绍

    #import "GLAppDelegate.h" @implementation GLAppDelegate // 当应用程序启动完毕的时候就会调用(系统自动调用) - (BOO ...