Android学习路径——Android的四个组成部分activity(一)

一、什么是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" >

四、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的启动与关闭,重点内容就是显示和隐式两种启动方式了,实际使用中出现的频率也非常高,非常有必要掌握。

时间: 2024-08-07 07:41:35

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

Android学习笔记(十四)——在运行时添加碎片(附源码)

在运行时添加碎片 点击获取源码 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中. 1.使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个<fragment>元素: 2.在FragmentActivity.java中添加下面的代码: FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fr

Android学习路线(十四)Activity生命周期——停止和重启(Stopping and Restarting)一个Activity

先占个位置,下次翻译~ :p Properly stopping and restarting your activity is an important process in the activity lifecycle that ensures your users perceive that your app is always alive and doesn't lose their progress. There are a few of key scenarios in which

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

Android学习——在Android中使用OpenCV的第一个程序

刚开始学习Android,由于之前比较熟悉OpenCV,于是就想先在Android上运行OpenCV试试 =================================================================================== 1.环境配置 JDK Eclipse ADT CDT Android SDK Android NDK cygwin OpenCV for Android 2.4.9 这部分网上很多,我就不再赘述了,可以参考:http://bl

[Android学习笔记]Android向下兼

Android向下兼容的思路:使用高版本的API,在运行时判断真实运行平台的API版本,根据不同版本做不同的处理 关键类:Build.class里面定义了API版本相关信息 内部类:VERSION定义当前系统的版本信息,其中包含SDK版本信息Build.VERSION.SDK_INT可以获取到当前运行的系统的SDK版本号 内部类:VERSION_CODES定义了各个版本的枚举信息 适配时: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONE

[Android学习笔记]Android中多线程开发的一些概念

线程安全: 在多线程的情况下,不会因为线程之间的操作而导致数据错误. 线程同步: 同一个资源,可能在同一时间被多个线程操作,这样会导致数据错误.这是一个现象,也是一个问题,而研究如何解决此类问题的相关工作就叫做线程同步. android中,处理线程同步的手段就是:锁 一般分为公平锁和非公平锁: synchronized(内部锁,互斥锁):synchronized是JVM提供的线程同步机制,如果出现问题,JVM能捕获异常,并释放资源,具体实现机制需要查看JVM源码 synchronized的使用特

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

1.的该项目文件所谓名单AndroidManifest.xml文件.该文件,但有很大的利用,例:app名字.图标,app支持的版本app等等.以下我就介绍下这个清单文件的各个參数的作用. <manifest xmlns:android="http://schemas.android.com/apk/res/android"命名空间 package="com.example.hello"包名唯一标示一个应用 android:versionCode="1

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

目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 之前,我们直接在activity中执行http通信,在通信过程中可能会出现连接超时.socket超时等情况,超时阈值一般是秒级,例如AndroidHttpClient中设置的20秒,如果出现超时,就