文章目录

  • 一、Activity 活动
    • 1. Activity的创建
      • (1). Android studio创建Activity
      • (2). Activity使用流程
    • 2. Activity的生命周期
      • (1). 生命周期的状态
        • 1. 启动状态
        • 2. 运行状态
        • 3. 暂停状态
        • 4. 停止状态
        • 5. 销毁状态
      • (2). 生命周期的方法
        • 1. onCreate()方法
        • 2. onStart()方法
        • 3. onResume()方法
        • 4. onPause()方法
        • 5. onStop()方法
        • 6. onDestroy()方法
        • 7.onRestart()方法
    • 3. Activity的启动模式
      • (1). Android任务栈
      • (2). Activity的四种启动模式
        • 1. standard 模式
        • 2. singleTop 模式
        • 3. singleTask 模式
        • 4. singleInstance 模式
    • 4. Activity之间的跳转
      • 1. 显示意图
      • 2. 隐式意图(隐式启动:通过Intent-filter的Action,Category或data来实现)
    • 5. Activity之间的数据传递
      • (1). 数据传递
        • 1. 商家配送
        • 2. 中间小哥配送
      • (2). 数据回传(后一个传回给前一个)
    • 6. 系统给我们提供的常见的Activity
    • 7. Fragment(碎片)
      • (1). Fragment的生命周期
      • (2). 创建Fragment
      • (3). 在Activtiy中添加Fragment
        • 1. 直接在布局文件中添加Fragment
        • 2. 当Activity运行时添加Fragment
  • 二、BroadcastReceiver 提供广播接收器
    • 1. 广播接受者简介
    • 2. 广播接受者入门
    • 3. 自定义广播
    • 4. 广播的类型
  • 三、Service 服务
    • 1. 服务的创建
    • 2. 服务的生命周期
    • 3. 服务的启动方式
    • 4. 服务的通信
  • 四、ContentProvider 内容提供者
    • 1. 内容提供者简介
    • 2. 内容提供者的创建
    • 3. 内容提供者的使用
    • 4. 内容观察者的使用
  • 五. Intent(意图)
    • 1. Intent简介
    • 2. Intent对象的属性
      • (1). Component Name属性
      • (2). Action和Data属性
      • (3). Action和Category
      • (4). Extras属性
      • (5). Flags属性
    • 3. Intent的种类
      • (1). 显式Intent
      • (2). 隐式Intent
    • 4. Intent过滤器

一、Activity 活动

在Android中,用户与程序的交互是通过Activity完成的,activity负责管理应用程序的用户界面。

Activity是Android程序中的四大组件之一,为用户提供可视化界面及操作。一个应用程序通常包含多个Activity,每个Activity负责管理一个用户界面。这些界面可以添加多个控件,每个控件负责实现不同功能。

Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!

1. Activity的创建

(1). Android studio创建Activity


创建Activity之后,重写oncreat()方法

注意:

  • 在Android中创建四大组件都需要在AndroidManifest.xml文件中注册

  • 创建完之后,Android studio会自动在AndroidManifest.xml文件中注册

      会自动添加一行 <activity android:name=".MainActivity">
    

(2). Activity使用流程

  • 注:可以继承Activity和AppCompatActivity,只不过后者提供了一些新的东西而已! 另外,切记,Android中的四大组件,只要你定义了,无论你用没用,都要在AndroidManifest.xml对 这个组件进行声明,不然运行时程序会直接退出,报ClassNotFindException…

2. Activity的生命周期

Activity的生命周期包含5种状态,涉及7中方法。

(1). 生命周期的状态

是一个Activity从创建到销毁的全过程,分为以下5个状态

1. 启动状态

2. 运行状态

3. 暂停状态

4. 停止状态

5. 销毁状态

(2). 生命周期的方法

1. onCreate()方法

2. onStart()方法

3. onResume()方法

运行(过渡)

4. onPause()方法

暂停

5. onStop()方法

6. onDestroy()方法

7.onRestart()方法

从停止状态到再次启动状态

3. Activity的启动模式

Activity是可以层叠摆放的,每启动一个新的Activity就会覆盖在原Activity上,如果单击返回按钮,最上面的Activity被销毁,下面的Activity重新显示。
原因是:Android系统同任务栈来管理Activity实例。

(1). Android任务栈

栈数据结构:先进先出
在Android中采用任务栈形式管理Activity。

通常一个应用程序对应一个任务栈,默认情况下每启动一个Activity都会入栈,并处于栈顶位置,用户操作的永远是栈顶的Activity。

  • Activity启动时压入栈
  • 用户单击返回弹出栈

(2). Activity的四种启动模式

1. standard 模式

是Activity的默认启动模式,这模式的特点:

  • 每启动一个Activity就会在栈顶创建一个新的实例

2. singleTop 模式

判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复用,否则创建新的实例。

3. singleTask 模式

每次启动该Activity时,系统首先会检查栈中是否存在当前Activity实例,如果存在则直接使用,并把当前Activity之上的所有实例全部出栈,否则会重新创建一个实例

4. singleInstance 模式

指定为singleInstance 模式的Activity会启动一个新的任务栈来管理Activity实例,无论从哪个任务栈中启动该Activity,该实例在整个系统中只有一个。

  • 意义:为了在不同程序中共享同一个Activity实例

4. Activity之间的跳转

在Android系统中,每个应用通常都由多个界面组成,每个界面就是一个Activity,在这些界面进行跳转时,实际上也就是Activity之间的跳转,Activity之间挑战需要用到Intent组件,通过Intent可以开启新的Activity实现页面的跳转功能。

根据开启目标组件的方式不同,Intent分类为:

1. 显示意图

  • 明确找的对象
  • 通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个
Intent intent = new Intent(当前Act.this,要启动的Act.class);
startActivity(intent);

2. 隐式意图(隐式启动:通过Intent-filter的Action,Category或data来实现)

  • 模糊不明确对象
  • 不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框
通过隐式Intent打开百度网页button.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction(intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);}});

5. Activity之间的数据传递

Android进行消息传递或数据传递,使用的也是Intent。

  • Intent不仅可以开启Activity、Service、BroadcastReceiver组件,还能在这些组件之间传递数据

数据传递也有两种方式:

(1). 数据传递

使用Bundle在Activity之间交换数据

Bundle是键值对的组合

1. 商家配送

放数据

接受数据,并放到文本框

2. 中间小哥配送

(2). 数据回传(后一个传回给前一个)

在Activity中,使用Intent既可以将数据传给下一个Activity、还可以将数据回传给上一个Activity

Activity中提供了一个startActivityForResult(Intent intent,int requestCode)方法,该方法也用于启动Activity,并且这个方法可以在当前Activity销毁时返回一个结果给上一个Activity

MainActivity

DetailActivity

6. 系统给我们提供的常见的Activity

//1.拨打电话
// 给移动客服10086拨打电话
Uri uri = Uri.parse("tel:10086");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);//2.发送短信
// 给10086发送内容为“Hello”的短信
Uri uri = Uri.parse("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);//3.发送彩信(相当于发送带附件的短信)
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("sms_body", "Hello");
Uri uri = Uri.parse("content://media/external/images/media/23");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png");
startActivity(intent);//4.打开浏览器:
// 打开Google主页
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent  = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);//5.发送电子邮件:(阉割了Google服务的没戏!!!!)
// 给someone@domain.com发邮件
Uri uri = Uri.parse("mailto:someone@domain.com");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(intent);
// 给someone@domain.com发邮件发送内容为“Hello”的邮件
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("text/plain");
startActivity(intent);
// 给多人发邮件
Intent intent=new Intent(Intent.ACTION_SEND);
String[] tos = {"1@abc.com", "2@abc.com"}; // 收件人
String[] ccs = {"3@abc.com", "4@abc.com"}; // 抄送
String[] bccs = {"5@abc.com", "6@abc.com"}; // 密送
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("message/rfc822");
startActivity(intent);//6.显示地图:
// 打开Google地图中国北京位置(北纬39.9,东经116.3)
Uri uri = Uri.parse("geo:39.9,116.3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);//7.路径规划
// 路径规划:从北京某地(北纬39.9,东经116.3)到上海某地(北纬31.2,东经121.4)
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);//8.多媒体播放:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);//获取SD卡下所有音频文件,然后播放第一首=-=
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);//9.打开摄像头拍照:
// 打开拍照程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
// 取出照片数据
Bundle extras = intent.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");//另一种:
//调用系统相机应用程序,并存储拍下来的照片
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
time = Calendar.getInstance().getTimeInMillis();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg")));
startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);//10.获取并剪切图片
// 获取并剪切图片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true"); // 开启剪切
intent.putExtra("aspectX", 1); // 剪切的宽高比为1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX", 20); // 保存图片的宽和高
intent.putExtra("outputY", 40);
intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路径
intent.putExtra("outputFormat", "JPEG");// 返回格式
startActivityForResult(intent, 0);
// 剪切特定图片
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp")));
intent.putExtra("outputX", 1); // 剪切的宽高比为1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // 保存图片的宽和高
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp"));
startActivityForResult(intent, 0);//11.打开Google Market
// 打开Google Market直接进入该程序的详细页面
Uri uri = Uri.parse("market://details?id=" + "com.demo.app");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);//12.进入手机设置界面:
// 进入无线网络设置界面(其它可以举一反三)
Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
startActivityForResult(intent, 0);//13.安装apk:
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);//14.卸载apk:
Uri uri = Uri.fromParts("package", strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it); //15.发送附件:
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client"));//16.进入联系人页面:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent);//17.查看指定联系人:
Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id联系人ID
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(personUri);
startActivity(intent);

7. Fragment(碎片)

让程序更加合理的利用屏幕空间

(1). Fragment的生命周期

(2). 创建Fragment

(3). 在Activtiy中添加Fragment

1. 直接在布局文件中添加Fragment

2. 当Activity运行时添加Fragment

二、BroadcastReceiver 提供广播接收器

1. 广播接受者简介

2. 广播接受者入门

3. 自定义广播

4. 广播的类型

三、Service 服务

1. 服务的创建

2. 服务的生命周期

3. 服务的启动方式

4. 服务的通信

四、ContentProvider 内容提供者

  • Android四大组件之一,主要用于应用程序之间的数据交换,它可以将自己的数据共享给其他应用程序使用

1. 内容提供者简介

2. 内容提供者的创建

3. 内容提供者的使用

4. 内容观察者的使用

五. Intent(意图)

1. Intent简介

四大组件间的 枢纽——Intent(意图),Android通信的桥梁

Intent叫意图,是程序中各组件之间的交互方式,可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。
一般用于启动Activity、Service、发送广播

2. Intent对象的属性

(1). Component Name属性

从MainActivity跳转到DetailActivity

public class MainActivity extends AppCompatActivity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.qqlogin);button=(Button) findViewById(R.id.btn_one);button.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Intent intent = new Intent();ComponentName componentName = new ComponentName("com.pudding.hellow","com.pudding.DetailActivity");intent.setComponent(componentName);startActivity(intent);}});}
}

(2). Action和Data属性


之后还有在AndroidManifest设置Android权限

(3). Action和Category

(4). Extras属性

多个Activity之间进行交换数据

(5). Flags属性

3. Intent的种类

(1). 显式Intent

  • 直接指定目标组件的名称
  • 多用于在应用程序内部传递信息

(2). 隐式Intent

  • 不会用组件名称定义要激活的目标组件
  • 多用于在不同应用程序之间传递消息

4. Intent过滤器

通过<intent-filter>标记在AndroidManifest.xml文件中配置

Android 四大组件相关推荐

  1. Android四大组件之BroadCastReceiver

    1. 基本概念 在Android 中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver 是对发送出来的Broadcast 进行过滤接受并响应的一类 ...

  2. Android 四大组件之——Service(一)

    一.什么是服务 服务,是Android四大组件之一, 属于 计算型组件.   长期后台运行的没有界面的组件 ,特点是无用户界面.在后台运行.生命周期长 二,什么时候使用服务? 天气预报:后台的连接服务 ...

  3. Android 四大组件之——Acitivity(一)

    一,什么是Activity activity是Android组件中最基本也是最为常见用的四大组件之一.Android四大组件有Activity,Service服务,Content Provider内容 ...

  4. Android——四大组件、六大布局、五大存储

    一.android四大组件 (一)android四大组件详解 Android四大组件分别为activity.service.content provider.broadcast receiver. 1 ...

  5. 重温Android四大组件(一)—Activity的生命周期

    前言 四大组件对于Android开发者是老生常谈的知识了,相信每个Android开发者对四大组件都已经很熟悉了.但是四大组件作为Android应用的基础,作为开发者不仅要熟悉而且要烂熟于心. 这里以& ...

  6. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  7. Android 四大组件 —— 服务

    一.服务是什么 服务(Service)是Android 中实现程序后台运行的解决方案,它非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使当程序被切换 ...

  8. android四大组件的作用简书,Android四大组件是什么

    Android四大组件是:活动.服务.广播接收器.内容提供商.它们的英文名称是ACTIVITY.SERVICE.BroadcastReceiver.Content Provider.四个组件分别起到不 ...

  9. Android 四大组件 与 MVC 架构模式

    作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...

  10. Android四大组件---BroadcastReceiver

    前言: BroadcastReceiver(广播接收器),属于 Android 四大组件之一 在 Android 开发中,BroadcastReceiver 的应用场景非常多 今天,我将详细讲解关于B ...

最新文章

  1. Uber致人死亡或为自动驾驶肇事责任 没有判例可循
  2. javaSE各阶段练习题--工具类-常用类-递归-包装类-内部类
  3. 写程序中的16张趣图。
  4. 在SharePoint 2010中创建网站的权限级别
  5. Spring框架中的单例Bean是线程安全的吗?
  6. 后端在插入数据发现重复如何正确的弹出警告_前百度面试官整理的——Java后端面试题(一)...
  7. symbian使用活动对象时返回-2147483647错误值的解决办法
  8. 电大计算机应用基础考试题6,2016电大计算机应用基础考试题及答案.doc
  9. CNBlog客户端--第一阶段记录
  10. java编译运行_如何编译运行一个简单的java程序
  11. JSON转EXCEL代码( java)
  12. 易基因表观技术 | m6A常量/微量RNA甲基化测序及案例文献
  13. 云计算认证系列:CKA认证
  14. 操作系统的概念(定义)
  15. mysql 无法启动 0xc000007b,windows安装mysql5.7教程 (MSVCR120.dll丢失。应用程序无法正常启动0xc000007b)...
  16. 无线抄表火热,ZigBee暂输于专用协议[转]
  17. LaTex使用技巧19:罗马数字输入(大写和小写)
  18. 远程 PC 访问软件
  19. python -flask简介
  20. python读取20万数据Excel文件+拆分数据

热门文章

  1. 微型计算机通常是由控制器等几部分组成,计算机基础试题及答案
  2. intel和amd处理器发展历史
  3. 常用的控件样式风格设置(qss)——QtWidgets
  4. SocksCap64全局代理设置教程
  5. Microsoft office 各个版本镜像下载
  6. TM2008 preview4 / QQ2009 preview 聊天记录保存位置修改
  7. 修改监视器驱动为大显示器来提高屏幕分辨率
  8. 常见网络安全威胁及防范
  9. 任务栏图标变成白色怎么办
  10. 史上最完整的APP商城源码(含服务器)