- 浏览: 3468105 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
Intent(意图)
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。
Intent可以划分成显式意图和隐式意图。
Intent一旦发出,Android都会准确找到想匹配的一个或多个Activity,Service或BroadcastReceiver作为响应。所以不同的Intent消息不会出现重叠:BroacastIntent消息只会发送给BroadcastReceiver,而绝不可能给Activity或Service。有startActivity()传递的消息也只可能发给Activity,由startService传送的Intent只可能发送给Service。
显式意图:调用Intent.setComponent()或Intent.setClass()方法指定了组件名或类对象的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图:没有调用Intent.setComponent()或Intent.setClass()方法指定组件名或类对象的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。实际上,一个隐式Intent请求要能通能够传递给目标组件,必须通过这三个方面的检测。如果任何一方面不匹配,Android都不会将该隐式Intent传递给目标组件。
对于隐式意图,Android是怎样寻找到这个最合适的组件呢?记的前面我们在定义活动时,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。
动作测试(Action test)
一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:
• 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。
• 另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试
类别测试(Category test)
对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。
原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大部分情况下这个是对的。但有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。 因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。(带"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"设置的过滤器是例外)
数据测试(Data test)
<data>元素指定了希望接受的Intent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme,authority和path。
当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。
数据测试同时比较意图对象和过滤器中指定的URI和数据类型。规则如下:
a. 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。
b. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。
c. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。
d. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file: URI而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持content:和file: 数据如果它的过滤器仅列举了一个数据类型。
显示意图和隐式意图在什么时候使用?
显示意图:软件内部组件间通信
隐式意图:软件之间通信
Activity生命周期
Activity有三个状态:
当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。
当它失去焦点但仍然对用户可见时(如右图),它处于暂停状态。即在它之上有另外一个Activity。这个Activity也许是透明的,或者没有完全覆盖全屏,所以被暂停的Activity仍对用户可见。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但系统处于极低内存时仍然可以杀死这个Activity。
完全被另一个Activity覆盖时则处于停止状态。它仍然保留所有的状态和成员信息。然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。
当Activity从一种状态转变到另一种状态时,会调用以下保护方法来通知这种变化:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:
Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。Activity在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如,如果Activity有一个线程在后台运行从网络上下载数据,它会在onCreate()创建线程,而在 onDestroy()销毁线程。
Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。onStart() 和 onStop() 方法可以随着应用程序是否为用户可见而被多次调用。
Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。在此期间,Activity位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause() 方法。当Activity获得结果或者接收到新的Intent时会调用onResume() 方法。
注(另外在Activity中的两个重要方法):
/*使用onSaveInstanceState(Bundle outState)方法以前保存的状态重新初始化某个活动时会调用该方法
。默认实现会还原用户界面的状态*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
Log.i(TAG, "onRestoreInstanceState()");
super.onRestoreInstanceState(savedInstanceState);
}
/*Android调用该方法的作用是让活动可以保存每个实例的状态,如光标在文本字段中的位置。
通常你无需复写该方法,因为该方法的实现会自动保存所有用户界面控制的状态。*/
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i(TAG, "onSaveInstanceState()");
super.onSaveInstanceState(outState);
}
- ActivityLife.rar (45.6 KB)
- 描述: activity生命周期
- 下载次数: 9
- MulActivity.rar (46.3 KB)
- 下载次数: 7
发表评论
-
Android 桌面部件
2011-07-06 19:26 1877桌面部件是一种利用AppWidget框架将应用程序的某个部件放 ... -
Android 实时文件夹
2011-07-06 15:38 2862实时文件夹是一种用来显示由某个ContentProvider提 ... -
android 添加桌面快捷方式
2011-07-05 19:20 13297、在桌面创建快捷方式方法: 方法一:通过长按某一个应用程序的 ... -
Android权限详解
2011-07-04 09:43 2246在Android的设计中,资源的访问或者网络连接,要得到这 ... -
Android权限注解
2011-07-04 09:33 3492Android应用程序在使用很多功能的时候必须在Mainife ... -
ListView使用SimpleAdapter加载网络图片
2011-07-02 19:14 7715ListView是一种常见的布局,通过SimpleAdapte ... -
android:layout_gravity 和 android:gravity 的区别
2011-07-02 19:00 2104gravity 这个英文单词是重心的意思,在这里就表示 ... -
横竖屏切换时不销毁当前activity 和 锁定屏幕
2011-07-02 18:58 3633首先在Mainifest.xml的Activity元素 ... -
onSaveInstanceState和onRestoreInstanceState触发的时机
2011-07-02 17:49 2885当某个activity变得“容易”被系统销毁时,该ac ... -
strings.xml文件中提供占位符来格式化数据
2011-07-01 16:16 3244有些朋友可能会动态的修改Android中strings. ... -
ANDROID开机动画分析
2011-05-25 15:40 5930Android 2.0 开机动画文件分析。开机动画文件:boo ... -
Android专栏地址,真的不错啊!!!
2011-05-22 20:22 1658第三极: http://disanji.net/cate ... -
A1200入门DIY
2011-05-22 11:40 0A1200入门DIY 2007-04-16 19:33 ... -
android用户界面数据绑定
2011-05-19 21:25 5284当我们想用合适的方式显示并操作一些数据(如数组,链表,数据库等 ... -
emulator: ERROR: the user data image is used by another emulator. aborting
2011-05-19 13:48 2356今天早上起床,运行项目时报错:Error the use ... -
Android Map demo
2011-04-23 22:24 3401AndroidManifest.xml <?xm ... -
Android Map申请key
2011-04-23 22:02 31241. 首先先要获取你的debug keystore位置 ... -
conversion to dalvik format failed with error 1
2011-04-23 21:52 3475android低版本工程(如1.5)放到高版本环境中(如2.2 ... -
Android GPS基础
2011-04-20 22:14 2787package org.example.locationtes ... -
Android API:Activity.managedQuery()
2011-04-20 19:22 2631描述: 获取一个包含指定数据的 Cursor 对 ...
相关推荐
在Android开发中,Activity、Bundle、请求码与结果码、Intent、广播以及服务是核心组件,它们构成了Android应用的基础架构。接下来,我们将深入探讨这些概念及其应用。 首先,Activity是Android应用程序的基本单元...
在Android应用开发中,Activity、Bundle、请求码与结果码、Intent、广播和服务是核心组件,它们构成了Android系统运行应用程序的基础框架。这篇文章将深入解析这些概念,并通过源码分析和实用工具来帮助开发者更好地...
### Android Activity和Intent机制详解 #### 一、Activity机制概览 **1.1 定义及作用** 在Android开发中,Activity是最基本的应用组件之一,可以将其理解为用户界面的一个屏幕。它提供了用户与应用交互的主要场所...
使用startActivity(Intent)或startActivityForResult(Intent, 请求码)方法启动Activity。startActivityForResult()用于需要接收返回结果的情况。 五、启动Service 使用startService(Intent)或bindService(Intent, ...
显式Intent用于指定要启动的确切组件(Activity或Service),而隐式Intent则是向系统广播一个行动请求,任何符合Intent过滤器的组件都可以响应。 2. 创建Intent 创建Intent非常简单,你可以使用`new Intent()`构造...
通过Intent,我们可以启动活动(Activity)、服务(Service)或者广播接收器(BroadcastReceiver),传递数据和指令。本篇文章将深入探讨Intent的属性和使用时的注意事项。 一、Intent的基本类型 Intent分为显式...
请求码用于确认返回的结果来自哪个`Activity`,结果码表示`Activity`的执行状态(如是否成功),数据则是`Activity`返回的数据,通常是一个`Intent`,可能包含额外的信息。 四、请求码和结果码 请求码是你自定义的...
这些模式影响着新Activity的创建方式以及现有Activity如何处理新的Intent请求。 1. standard(默认):每次启动Intent都会创建一个新的Activity实例,即使栈中已有该Activity。 2. singleTop:如果目标Activity已经...
Intent 可用于启动活动(Activity)、服务(Service),传递数据,甚至启动广播接收器(Broadcast Receiver)。本压缩包文件“安卓Android源码——Intent1.rar”很可能包含了有关Intent的源代码分析和示例,帮助...
在回调方法`onRequestPermissionsResult()`中处理权限请求的结果。 总的来说,获取Android来电和去电号码涉及了权限管理、广播接收器以及运行时权限等核心知识点。通过这些技术,开发者可以实现电话状态监控,进而...
Intent包含了具体的操作请求信息,可以启动Activity、Service或发送广播。启动Activity有两种方式:直接使用`startActivity(Intent intent)`启动新的Activity,或者在现有Activity中使用`startActivityForResult...
在Android应用开发中,Intent是连接各个组件的重要桥梁,它用于启动活动(Activity)、服务(Service)或广播接收器(Broadcast Receiver)。当我们想要调用系统相机功能时,Intent扮演了关键角色。本教程将深入讲解...
在Android开发中,广播接收器(BroadcastReceiver)是一种重要的组件,它允许应用程序监听并响应系统或自定义事件。本文将详细讲解如何在Android中创建一个接收屏幕状态改变广播的示例。 首先,我们需要理解Android...
除了基本的数据传递,还有请求码(requestCode)和结果码(resultCode)的概念。当你使用`startActivityForResult(Intent intent, int requestCode)`启动Activity时,requestCode用于识别哪个按钮或者事件触发了这次...
在Android应用开发中,Intent是实现组件间通信的关键机制,它可以用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast Receiver)。当我们想要调用系统相机服务时,Intent的作用尤为显著。本教程将...
- 在父Activity中重写`onActivityResult(int requestCode, int resultCode, Intent data)`方法来接收子Activity返回的结果,通过`requestCode`匹配请求,`resultCode`判断返回状态,`data`获取返回的Intent数据。...
`ContextImpl.sendBroadcast()`方法负责获取广播的MIME类型(如果已指定),并通过`ActivityManagerNative.getDefault()`获取`ActivityManagerService`的代理对象,并将广播意图发送给该服务进行进一步处理。...