- 浏览: 1843240 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (665)
- 闲话 (17)
- ruby (1)
- javascript (40)
- linux (7)
- android (22)
- 开发过程 (11)
- 哥也读读源代码 (13)
- JVM (1)
- ant (2)
- Hibernate (3)
- jboss (3)
- web service (17)
- https (4)
- java基础 (17)
- spring (7)
- servlet (3)
- 杂记 (39)
- struts2 (10)
- logback (4)
- 多线程 (2)
- 系统诊断 (9)
- UI (4)
- json (2)
- Java EE (7)
- eclipse相关 (4)
- JMS (1)
- maven (19)
- 版本管理 (7)
- sso (1)
- ci (1)
- 设计 (18)
- 戒烟 (4)
- http (9)
- 计划 (4)
- HTML5 (3)
- chrome extensions (5)
- tomcat源码阅读 (4)
- httpd (5)
- MongoDB (3)
- node (2)
最新评论
-
levin_china:
勾选了,还是找不到
用spring annotation声明的bean,当打包在jar中时,无法被扫描到 -
GGGGeek:
我用的maven-3.5.0,还没有遇到这种情况,使用jar ...
用spring annotation声明的bean,当打包在jar中时,无法被扫描到 -
GGGGeek:
受益匪浅,从组织项目结构,到技术细节,讲的很到位,只是博主不再 ...
一个多maven项目聚合的实例 -
Aaron-Joe-William:
<?xml version="1.0" ...
hibernate逆向工程 -
li272355201:
http://archive.apache.org/dist/ ...
tomcat源码阅读(一)——环境搭建
明天才开始讨论包需求,估计离进入开发阶段还要一段时间,今天继续复习android in action,结合之前的知识,把总结的东西记一记
1. 一个应用内部各组件之间的跳转,以及不同应用间组件的跳转(这里的组件包括activity、service、receiver、provider),是通过Intent和IntentFilter实现的。包括显式Intent和隐式Intent。
对于在Manifest文件中没有配置Intent-Filter的组件,只能在应用内部通过显式Intent来跳转,这种情况需要设置Intent的Component。
在Manifest中配置了Intent-Filter的组件,既可以通过显式Intent跳转,也可以通过隐式Intent跳转,并且可以跨应用跳转。这种情况下,需要设置Intent的Action、Category、Data
此外,可以通过给Intent设置Extra,来携带一些数据
Android in Action这本书里说,understanding intent, and you will understand android。现在来看,也是夸大了一点,android也没他说的这么简单
2. 至于在设置了Intent,并发送Intent请求,比如startActivity(Intent intent)之后,系统寻找匹配组件的过程是这样的。
首先,如果是显式Intent,那么比较简单
这种情况下,android系统直接到该应用的Manifest文件中找指定的Activity,如果找到则跳转,如果没有找到,则抛出一个异常
如果是隐式Intent,情况要略微复杂一点,也不难
这种情况下,系统会把所有应用内,配置了Intent-Filter的Activity都遍历一遍,包括安装的第三方应用,和系统自带的应用。根据Intent的参数,和Intent-Filter的设置逐一匹配。如果没有找到合适结果,则抛出异常。如果只有唯一结果,则直接跳转。如果有多个结果,则弹出对话框让用户进行选择
3. 至于Intent和IntentFilter的匹配规则,很多地方都能找到详细的文档,我这里就不罗嗦了。只是有一点特别提醒一下,由于隐式的Intent,如果没有设置Category,则跳转的时候系统会自动加上DEFAULT CATEGORY,相当于以下代码
所以为了能够匹配成功,在intent-filter的配置里,也要加上CATEGORY_DEFAULT才可以,否则就匹配不到了
4. 看sample代码,学习到一个开机时自动启动某个service的方法,还是不错的。首先配置一个BroadcastReceiver,其intent-filter加上action:android.intent.action.BOOT_COMPLETED。这样的话,当系统开机之后,广播一个BOOT_COMPLETED消息的时候,这个Receiver就能收到
然后在此Receiver的onReceiver()方法里,就可以调用startService()方法了
5. 前面的博客已经介绍过Activity的生命周期了,与它不同的是,Receiver组件的生命周期是很短的,在执行过onReceiver()方法之后,该组件的实例和所在的进程,都被标记为可以被系统回收。所以在Receiver里,不能搞一些异步操作,也不能长久的存放变量,很可能说没就没了
6. 大家都知道adb shell命令是很好用的,可以用来查看文件,执行SQLite操作等。如果eclipse同时连接了多个AVD,或许还连接了真机,这个时候直接打adb shell就不好使了。
可以先打adb devices命令,就可以看到目前有哪些AVD和真机可以连接
然后打adb -s emulator-5554 shell,就可以连接到emulator-5554这台AVD上
7. 关于sqlite3命令,连接上SQLite后。有2个命令比较方便,一个是.tab,可以看到所有的表。第二个是.h on,可以在查询时看到列的名称
8. 再介绍一下Service组件的生命周期,比Activity也要简单一点。分两种情况
如果Service是通过startService()方法启动的,那么这是一个后台服务,它的生命周期就比较长,会经历onCreate()、onStart()、onDestory()方法。其实还有一些其他方法,比如onLowResource()等,不过不常用,主要的就是前面说的3个方法
如果Service是绑定到另一个组件上的,那其生命周期就不长于绑定的组件,而且onStart()方法不会被系统调用
9. 虽然可以通过startService(Intent)方法,来启动另一个应用中的Service,其实就是使其调用onStart()方法。但是如果需要调用另一个应用中的Service组件的某一个特定方法,这种粒度的需求,靠Intent就无法实现了。因为不同的应用都是跑在独立的沙盒中的,也处于不同的进程中。(前面已经介绍过,一个应用对应一个进程,以及一个Dalvik实例)
这种情况下,android提供了AIDL方式,来实现跨应用的服务调用。粗略看了一下,感觉比较复杂。既然目前没有这个场景,我也就不去深究了,知道有这么一种方式就可以了,以后需要的时候再来看。有兴趣的朋友,可以去看android in action这本书第4章的结尾部分,讲得非常清楚
1. 一个应用内部各组件之间的跳转,以及不同应用间组件的跳转(这里的组件包括activity、service、receiver、provider),是通过Intent和IntentFilter实现的。包括显式Intent和隐式Intent。
对于在Manifest文件中没有配置Intent-Filter的组件,只能在应用内部通过显式Intent来跳转,这种情况需要设置Intent的Component。
在Manifest中配置了Intent-Filter的组件,既可以通过显式Intent跳转,也可以通过隐式Intent跳转,并且可以跨应用跳转。这种情况下,需要设置Intent的Action、Category、Data
此外,可以通过给Intent设置Extra,来携带一些数据
Android in Action这本书里说,understanding intent, and you will understand android。现在来看,也是夸大了一点,android也没他说的这么简单
2. 至于在设置了Intent,并发送Intent请求,比如startActivity(Intent intent)之后,系统寻找匹配组件的过程是这样的。
首先,如果是显式Intent,那么比较简单
Intent intent = new Intent(this,XXXActivity.class);
这种情况下,android系统直接到该应用的Manifest文件中找指定的Activity,如果找到则跳转,如果没有找到,则抛出一个异常
如果是隐式Intent,情况要略微复杂一点,也不难
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setCategory(Intent.CATEGORY_DEFAULT);
这种情况下,系统会把所有应用内,配置了Intent-Filter的Activity都遍历一遍,包括安装的第三方应用,和系统自带的应用。根据Intent的参数,和Intent-Filter的设置逐一匹配。如果没有找到合适结果,则抛出异常。如果只有唯一结果,则直接跳转。如果有多个结果,则弹出对话框让用户进行选择
3. 至于Intent和IntentFilter的匹配规则,很多地方都能找到详细的文档,我这里就不罗嗦了。只是有一点特别提醒一下,由于隐式的Intent,如果没有设置Category,则跳转的时候系统会自动加上DEFAULT CATEGORY,相当于以下代码
intent.setCategory(Intent.CATEGORY_DEFAULT);
所以为了能够匹配成功,在intent-filter的配置里,也要加上CATEGORY_DEFAULT才可以,否则就匹配不到了
4. 看sample代码,学习到一个开机时自动启动某个service的方法,还是不错的。首先配置一个BroadcastReceiver,其intent-filter加上action:android.intent.action.BOOT_COMPLETED。这样的话,当系统开机之后,广播一个BOOT_COMPLETED消息的时候,这个Receiver就能收到
然后在此Receiver的onReceiver()方法里,就可以调用startService()方法了
5. 前面的博客已经介绍过Activity的生命周期了,与它不同的是,Receiver组件的生命周期是很短的,在执行过onReceiver()方法之后,该组件的实例和所在的进程,都被标记为可以被系统回收。所以在Receiver里,不能搞一些异步操作,也不能长久的存放变量,很可能说没就没了
6. 大家都知道adb shell命令是很好用的,可以用来查看文件,执行SQLite操作等。如果eclipse同时连接了多个AVD,或许还连接了真机,这个时候直接打adb shell就不好使了。
可以先打adb devices命令,就可以看到目前有哪些AVD和真机可以连接
然后打adb -s emulator-5554 shell,就可以连接到emulator-5554这台AVD上
7. 关于sqlite3命令,连接上SQLite后。有2个命令比较方便,一个是.tab,可以看到所有的表。第二个是.h on,可以在查询时看到列的名称
8. 再介绍一下Service组件的生命周期,比Activity也要简单一点。分两种情况
如果Service是通过startService()方法启动的,那么这是一个后台服务,它的生命周期就比较长,会经历onCreate()、onStart()、onDestory()方法。其实还有一些其他方法,比如onLowResource()等,不过不常用,主要的就是前面说的3个方法
如果Service是绑定到另一个组件上的,那其生命周期就不长于绑定的组件,而且onStart()方法不会被系统调用
9. 虽然可以通过startService(Intent)方法,来启动另一个应用中的Service,其实就是使其调用onStart()方法。但是如果需要调用另一个应用中的Service组件的某一个特定方法,这种粒度的需求,靠Intent就无法实现了。因为不同的应用都是跑在独立的沙盒中的,也处于不同的进程中。(前面已经介绍过,一个应用对应一个进程,以及一个Dalvik实例)
这种情况下,android提供了AIDL方式,来实现跨应用的服务调用。粗略看了一下,感觉比较复杂。既然目前没有这个场景,我也就不去深究了,知道有这么一种方式就可以了,以后需要的时候再来看。有兴趣的朋友,可以去看android in action这本书第4章的结尾部分,讲得非常清楚
发表评论
-
最近半个月开发小结
2011-12-05 22:16 13141、有一个方法,有一段 ... -
android培训文档提纲(四)
2011-11-27 23:28 12501、生命周期方法onSaveInstanceState()是在 ... -
Tasks and Back Stack
2011-11-22 23:47 1183Even though the activities may ... -
上周开发过程中几个简单问题的总结
2011-11-21 13:18 1363上周开发中组员遇到几个问题,都不是大问题,但都耽搁了一些时间。 ... -
android培训文档提纲(三)
2011-11-12 23:47 17651、Activity和Service组件是Context的子类 ... -
android的Log组件和logcat命令
2011-11-12 23:03 6324项目进入开发阶段了, ... -
android培训文档提纲(二)
2011-11-07 21:10 1663一、Each Activity can make an ... -
android培训文档提纲(一)
2011-10-23 14:05 1607最近项目快要进入开发 ... -
顶部有一排按钮,最底下还有FooterView的ListView页面
2011-08-13 15:46 3302先上效果图: 下面详细说说这个页面是怎么做出来的: 1、 ... -
实现屏幕下方展示的TAB分页
2011-08-09 23:22 2176这篇博客是参考helloandroid兄的腾讯微博应用,我整理 ... -
PendingIntent
2011-08-08 16:02 1561在开发SMS等应用时,有时调用相关的API会要求提供一个类型为 ... -
android数据持久化总结
2011-08-06 12:23 19211、 通过Context.getSharedPreferenc ... -
最近两周android总结
2011-08-01 23:42 1616最近2周预研做得差不多 ... -
没有单元测试,怎能写代码
2011-07-25 17:56 1573项目前期的技术点预研完成了,最近开始做原型开发。 之前没有在 ... -
android process and thread
2011-07-18 16:31 1695前三周android预研中,把可能用到的技术点都识别了,并完成 ... -
android第三周小结
2011-07-18 10:16 13641. 系统自带的通讯录应用,联系人名单保存在data/data ... -
onPause()方法的特殊性
2011-07-15 17:11 2929onPause(), onStop(), onDestroy( ... -
activity存在的三种状态
2011-07-15 16:44 1775An activity can exist in essent ... -
android第二周小结
2011-07-14 10:50 11641. 做了短信侦听的Broadca ... -
android一周小结
2011-07-04 21:26 1232做了一周android预研,总结以下几条: 1. 用DDMS ...
相关推荐
在Android应用开发中,Intent是连接应用程序组件的重要机制,它是一种消息传递对象,用于启动其他组件(如Activity、Service、BroadcastReceiver)或者传递数据。Intent-filters则定义了组件能够响应的Intent类型,...
2. android 4-Activity and Intent.pptx - 这个文件可能是关于Android的第4节,专门讨论Activity和Intent的关系。可能会深入解释Activity的生命周期与Intent如何影响其状态变化,比如如何通过Intent启动Activity以及...
这种编程方式强调通过 Intent 对象来表达应用的意图或目标,实现组件间的松散耦合,增强系统的可插拔性(Plug and Play)。 在 Android 系统中,四大核心组件——Activity、Service、IntentReceiver 和 ...
标题"aild cleinet and aidl service"暗示我们将探讨如何通过AIDL实现客户端(client)和服务(service)之间的通信。 描述中提到“很好的学习 aidl 跨进程访问”,这意味着我们会有两个APK文件,一个是AIDLClient...
在Android应用开发中,Intent是实现组件间通信的关键机制,它可以用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast Receiver)。当我们想要调用系统相机服务时,Intent的作用尤为显著。本教程将...
Intent Filters则是接收Intent的组件(如Activity、Service等)用来声明它们能处理的Intent类型。本教程将深入讲解Intent和Intent Filters,特别是如何利用它们进行数据检测。 在Intent Filter中,`<data>`标签用于...
在Android应用开发中,Intent是连接应用程序组件的重要机制,它被用来启动新的Activity或Service,同时还能传递数据。本文将详细讲解如何运用Intent实现在两个Activity之间进行数据传输,包括Activity1向Activity2...
在Android应用开发中,Intent是连接各个组件(如Activity、Service等)的重要桥梁,用于传递数据和启动意图。当我们需要在不同的组件之间传递一个ArrayList对象时,由于Intent默认只支持基本类型和Parcelable接口...
在Android应用开发中,Intent是连接各个组件(如Activity、Service等)的重要纽带,它用于在组件间传递数据。本DEMO重点展示了如何通过Intent来传递对象和数组,这是一个非常实用且常见的技能点。下面我们将深入探讨...
结合压缩包中的`My_Toast_and_Notification`文件,我们可以创建一个简单的Android项目,实现`Toast`显示、`Notification`推送以及使用`Intent`启动新的Activity。在`MainActivity`中,你可以为不同的按钮绑定对应的...
在Android应用开发中,Intent是一种强大的机制,用于在不同的组件之间进行通信,如活动(Activity)、服务(Service)以及广播接收器(BroadcastReceiver)。在Xamarin.Android中,我们可以利用C#的强大特性来处理...
关于这一点的更多信息可以在官方文档的“Processes and Threads”部分找到。 - **IntentService类**:这是一个标准实现的Service类,它自带一个工作线程,在这个线程中调度其工作。 #### 二、Service的分类 根据...
public IBinder onBind(Intent intent) { return binder; } private final IMusicControlService.Stub binder = new IMusicControlService.Stub() { @Override public void stop() throws RemoteException { ...
在Android开发中,Intent是应用组件之间通信的重要桥梁,它能用来启动Activity、Service等,同时也承担着数据传递的角色。然而,Intent的putExtra()方法默认并不支持自定义对象的直接传输,这时我们需要采取特定的...
Intent是Android系统中用来启动Activity、Service或发送广播的一种机制。在测试中,我们可能需要模拟用户通过点击按钮触发的Intent行为。Espresso提供了一个名为`IntentsTestingRule`的规则类,允许我们在测试环境中...
public final IBinder onBind(Intent intent)从类 Service 复制的描述 Return the communication channel to the service. May return null if clients can not bind to the service. The returned IBinder is ...
Intent通常用于启动新的Activity或者Service,而在Intent中传递数据时,Bundle是常用的工具。本文将详细讲解如何通过Intent使用Bundle在Android中传递对象。 首先,我们需要知道在Android中,如果想要通过Intent...