今天开始学四大组件。今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者。四大组件,咱们一天一个。Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面。创建多个Activity,在不同的页面之间进行跳转并且在不同的页面之间进行数据的传递。

创建一个新的Activity,想办法把它给打开。打开一个Activity就涉及到一个隐式意图和一个显式意图。intent,第二天的时候打电话,电话拨号器就用到了这个东西。

Activity的生命周期。讲Servlet的时候提到过生命周期的概念。说一下Activity的生命周期和它的生命周期方法究竟有什么用。

最后说一下Activity的任务栈。

Activity是四大组件里面最重要的一个组件。所以今天的内容需要全部掌握,都是非常重要的重点。必须全部掌握。


创建一个新的Activity。其实之前写代码的时候Activity实际上都不需要咱们创建。因为咱们默认勾上了帮咱们创建一个空的MainActivity。现在得自己创建一个新的Activity。

package com.itheima.createnewactivity;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载界面 解析xml文件 把xml文件中声明的控件 创建出对应的java对象
setContentView(R.layout.activity_main);
//new M
}
}
package com.itheima.createnewactivity;

import android.app.Activity;
import android.os.Bundle; public class SecondActivity extends Activity {
//重写onCreate()方法
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);//第二个Activity对应的Java类已经写好了.
//findViewById(id)
//setOnClickListener
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> </RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#ff0000" android:text="我是第二个Activity" /> </RelativeLayout>

为什么要重写这个onCreate()方法?onCreate()什么时候执行这个还记得吗?第一天在讲电话拨号器的时候就提过这个。当我的Activity一创建的时候,这个对象创建起来之后系统就会帮助咱们调用onCreate()方法。所以在onCreate()方法中要做的就是跟初始化相关的操作。比如setContentView把界面初始化过来。比如findViewById(id)找到我需要操作的目标。比如说我给按钮设置点击事件,setOnClickListener。这些东西都要放在onCreate()里面。


不在AndroidManifest.xml里面配置一下是无法显示SecondActivity界面的。MainActivity在清单文件里面有一个activity节点。每创建出一个新的Activity如果你想用的话就必须在清单文件里面声明对应的Activity。为什么必须声明?需要注意的是所有的四大组件都不能自己去创建这个对象。

MainActivity也有无参的构造而且是public也可以去调,但是咱不能自己调。所有的四大组件的对象都需要系统帮助咱们创建。系统创建怎么创建?就是通过反射的方式。所以你必须在清单文件里面声明对应的节点。

SecondActivity第二个界面也已经声明完了。

问题出在清单文件里面activity节点的意图过滤器的那段代码。

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

意图过滤器如果你给它指定了一个action,这个叫MAIN.category有一个东西叫LAUNCHER.LAUNCHER是启动/发射.所以LAUNCHER这个东西是作为了一个启动器。如果你的一个Activity声明了这么一个intent-filter意图过滤器,它里面action是MAIN,category是LAUNCHER,那么这一个Activity就会作为应用的入口并且在桌面上放了一个图标。


为什么SecondActivty也是写MAIN和LAUNCHER,但是启动的是第一个MainActivity.因为MainActivity在前面,你一个应用那肯定只有一个入口。它这个PULL解析是一行一行来的,解析到<activity默认谁在前面谁就是启动器。但是呢桌面上这个图标确实给SecondActivity放了一个。

当前就比较诡异了,当前我这一个应用但是桌面上有两个图标。但是呢点击去的界面还不一样。正常的情况下所有的应用只有这么一个图标。但是有的设备上你即使这么写了它也不会帮你创建两个图标,它会自动地把第二个Activity过滤掉,默认只是第一个Activity起作用。但是只要有的设备可能会出现这个情况,那咱们就不能够这么做。

所以说每一个应用只能有一个Activity下配置这么一个intent-filter,就是action是MAIN,category是LAUNCHER.

应用的名字是application节点的android:label显示的.

    <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"

如果application节点的android:label和下面的activity节点的android:label标签是一样的那就无话可说了。但是可以给activity节点指定一个特殊的android:label标签.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.createnewactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.createnewactivity.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.itheima.createnewactivity.SecondActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.createnewactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.createnewactivity.MainActivity"
android:label="第一个activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.itheima.createnewactivity.SecondActivity"
android:label="第二个activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

你作为启动界面的Activity它里面所配置的android:label,如果你这个没有配置的话它默认会找application.如果你配置了的话一定是用Activity的android:label.application的label是在应用管理器里显示的.

application的label在这里显示。

android:icon="@drawable/ic_launcher"

icon就是给它指定一个图标。如果在activity节点下你声明了android:icon和android:label,那么默认他使用的就是activity下的icon,如果你没声明的话他会去找application节点下的icon和label。


一个应用两个图标看起来是很诡异的。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itheima.createnewactivity"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.itheima.createnewactivity.MainActivity"
android:icon="@drawable/header1"
android:label="第一个activity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.itheima.createnewactivity.SecondActivity"
android:icon="@drawable/header2"
android:label="第二个activity" >
<!--
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
-->
</activity>
</application> </manifest>

在activity和application节点里面咱们都可以去声明一个icon和一个label,如果它们俩都有默认使用activity里面,application这个最终就会展示到我的应用管理器,在那个位置上会看到application节点下声明的对应的内容。

01_创建一个新的activity&activity配置清单文件的更多相关文章

  1. Android 创建一个新的Activity

    本文转载自:http://www.cnblogs.com/wuyudong/p/5658020.html 新建一个项目,创建一个java类,继承自Activity 新建一个Android.xml文件: ...

  2. 安卓入门 使用android创建一个项目 从启动activity中响应按钮事件 启动另一个activity 并传递参数

    启动android studio创建一个新项目 public void sendMessage(View view){ Intent intent=new Intent(this,DispalyMes ...

  3. 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目

    喜大普奔                         10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...

  4. soapui中文操作手册(一)----创建一个新的项目

    1) 创建一个新的项目 点击项目,选择新建项目SOAP.这将打开一个新的SOAP项目对话框. 注意:你也可以做CTRL + N(WIN)或CMD+ N(MAC)来创建一个新的SOAP项目. 在新的SO ...

  5. Eclipse中创建一个新的SpringBoot项目

    在Eclipse中创建一个新的spring Boot项目: 1. 首先在Eclipse中安装STS插件:在Eclipse主窗口中点击 Help -> Eclipse Marketplace... ...

  6. Linux内核及分析 第六周 分析Linux内核创建一个新进程的过程

    实验过程 1.github上克隆相应的mengning/menu.git 2.测试menuOS,测试fork直接执行结果 3.配置调试系统,进入gdb调试,利用file linux-3.18.6/vm ...

  7. 记一次oracle创建一个新数据库,并导入正式环境数据库备份的dmp包过程

    背景:正式环境oracle数据库定时用exp备份一个dmp包,现在打算在一台机器上创建一个新数据库,并导入这个dmp包. 1.创建数据库 开始 -> 所有程序 -> Oracle -> ...

  8. Vue Create 创建一个新项目 命令行创建和视图创建

    Vue Create 创建一个新项目 命令行创建和视图创建 开始之前 你可以先 >>:cd desktop[将安装目录切换到桌面] >>:vue -V :Vue CLI 3.0 ...

  9. Jersey 2.x 从Maven Archetype 创建一个新项目

    创建 Jersey 工程需要使用 Apache 的 Maven 软件工程和管理工具.所有的Jersey产品模块都可以在 Maven中央库 中找到.这样的话 Jersey 可以非常容易和其他基于 Mav ...

随机推荐

  1. CodeVs1519 过路费

    题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,…,n.这个国家的政府修建了m 条双向道路,每条道路连接着两个城市.政府规定从城市 S 到城市T需要收取的过路费 ...

  2. poj2689素数问题

    打算重新刷一下数论题,忘了很多了,水平也很差,此题入手就不顺了,刷了一个早上,只是一个简单 的素数应用罢了.题意:找出区间长度不超过10^6的最近的素数和最远的素数(相邻的), 算法:数在int范围内 ...

  3. [Bzoj1069][Scoi2007]最大土地面积(凸包)(旋转卡壳)

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3629  Solved: 1432[Submit][Sta ...

  4. Spring实战Day1

    为什么要学习使用Spring ------为了全方面简化Java开发 如何简化开发呢? 1.基于POJO[简单老式Java对象(Plain Old Java object)]的轻量级和最小侵入性编程, ...

  5. zookeeper一二三

    1.zookeeper介绍 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅. ...

  6. 一起talk C栗子吧(第一百回:C语言实例--使用信号量进行进程间同步与相互排斥一)

    各位看官们.大家好,上一回中咱们说的是进程间同步与相互排斥的样例,这一回咱们说的样例是:使用信号量进行进程间同步与相互排斥. 闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,信号量是由著名 ...

  7. 【Scrapy】Selectors

    Constructing selectors For convenience,response objects exposes a selector on .selector attribute,it ...

  8. 《javascript设计模式》读书笔记二(封装和隐藏信息)

    1.为什么要封装和信息隐藏 做过编程的朋友们知道"耦合"这个词.事实上封装的效果就是为了解耦,让类和类之间没有太多的联系,防止某一天改动某一类的时候,产生"多米骨诺牌效应 ...

  9. Linux环境搭建:1. 安装VMware

    我家淘宝店,主要协助同学做毕业设计:https://shop104550034.taobao.com/?spm=2013.1.1000126.d21.pPCzDZ 1. 下载VMware 能够到我的3 ...

  10. 《Java设计模式》之訪问者模式

    訪问者模式是对象的行为模式.訪问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作须要改动的话,接受这个操作的数据结构则能够保持不变. 分派的概念 变量被声明时的类型叫做变量的静态类 ...