今天开始学四大组件。今天是学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. PHP日历程序编写(简单实现)

    <meta charset="utf-8"><?php $year = isset($_GET['year']) ? $_GET['year'] : date(& ...

  2. spring security3.1升级到4.1问题(1)访问/j_spring_security_check 404

    升级完后,发现登录不进去,把post改成get好了,但是系统的提交表单功能都不能用了,也是解决了很长时间,最后找到了根本原因. spring sercurity 4.0 csrf保护是默认开启的,cs ...

  3. 【BZOJ2733】永无乡(线段树,启发式合并)

    题意:支持合并,求块内K小数 对于 100%的数据 n≤100000,m≤n,q≤300000 思路:对于每一个块建立一棵动态开点的线段树,暴力(启发式?)合并后二分下就行了 merge用函数的方式写 ...

  4. 转 Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    转自: http://www.cnblogs.com/huangcong/archive/2011/08/29/2158268.html 黄聪:Python 字符串操作(string替换.删除.截取. ...

  5. php中memcache与memcached的区别 【收藏】

    说法一:    两个不同版本的php的memcached的客户端 new memcache是pecl扩展库版本new memcached是libmemcached版本功能差不多 说法二:    Mem ...

  6. python学习之-- redis模块操作 HASH

    redis 操作 之 -Hash Hash 操作:hash在内存中的存储格式 name hash n1 ------> k1 -> v1 k2 -> v2 k3 -> v3hs ...

  7. 寒武纪camp Day6

    补题进度:10/10 A(树形dp) 略 B(dp) 题意: 给出一个n个关键节点的机械手臂,最开始是竖直的,即关键点在二维平面上的坐标分别是(0,0) (0,100) (0,200) (0,300) ...

  8. Linux系统启动流程分析

    作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...

  9. 运行计划中cost计算方法

    概念: blevel:二元高度=索引高度-1 clustering_factor:集群因子,通过索引扫面得出的要查询table的blocks数量,clustering_factor接近table的bl ...

  10. 嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 文档简介

    Osd Scd (1)     Introduction over view a)         scene change detection block diagram a)         gr ...