一、什么是Activity?
Activity简单的说就是一个界面,我们在Android手机上看到的每一个界面就是一个activity。
二、Activity的创建
1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注册activity,这个activity就创建成功了。
public class MyActivity extends 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即可,当然一般没人这么干,多个应用图标容易引起用户的困扰。
三、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);
四、activity的显示
activity是一个个用户看到的界面,那么我们怎么定义要看到的内容的,很简单,在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的启动与关闭,重点内容就是显示和隐式两种启动方式了,实际使用中出现的频率也很高,很有必要掌握。