2021-04-13

1;Web端测试和app测试相同点及区别:
1.相同点

不管是传统行业的web测试还是新兴的手机app测试都离不开测试的基础知识,即使不管怎么变,测试的原理依然会融入在这两者当中。

1)设计测试用例时依然是根据边界值、有效等价类和无效等价类、场景法、因果图法、错误推测法来设计用例。
2)多数依然是采用黑盒测试方法来验证业务功能是否得到正确的应用。
3)测试方向依然是:ui界面布局是否合理,风格按钮是否简洁美观、功能测试、稳定性测试、页面载入和翻页的速度,登录时长,内存是否溢出、安全测试、性能测试。

2.不同点

相对于web测试,手机软件测试,除了要考虑基本的功能测试、性能等,还要考虑手机本身固有的属性特征。所以对比web测试和手机测试,手机测试过程中还需要注意如下几个方面特性:

1)手机作为通信工具,来电、去电、接收短信等操作都会对app应用程序产生影响,所以app测试第一个要考虑的属性特征是:中断测试。

中断测试有人为中断、新任务中断以及意外中断等几种情况,主要从以下几个方面进行验证:

a.来电中断:呼叫挂断、被呼叫挂断、通话挂断、通话被挂断

b.短信中断:接收短信、查看短信

c.其他中断:蓝牙、闹钟、插拔数据线、手机锁定、手机断电、手机问题(系统死机、重启)

2)手机用户对app产品的安装卸载操作:从上一个版本/上两个版本直接升级到最新版本。

全新安装新版本

新版本覆盖旧版本安装

卸载旧版本,安装新版本

卸载新版本,安装新版本

3)兼容性的区别

web测试主要考虑浏览器内核以及浏览器版本的兼容,操作系统的兼容性,分辨率的兼容。

APP兼容性主要考虑不同厂家的不同手机型号、系统版本、屏幕分辨率、屏幕大小、内存大小。

4)APP横竖屏测试,不同方向屏幕显示以及操作。
5)APP测试还需要考虑网络2G3G4G5G WIFI 弱网环境。
2;如何测试一个app的登录
功能测试 (Function test)
1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录
2.输入错误的用户名或者密码,  验证登录会失败,是否有相应的错误提示信息
3.登录成功后是否跳转到正确的页面
4.用户名和密码,如果太短或者太长,应该怎么处理
5.用户名和密码,中有特殊字符,和其他非英文的情况
6.记住用户名和密码的功能
7.登陆失败后,不能记录密码的功能
8.用户名和密码输入时前后有空格的处理
9.密码是否可见,是否用星号标识
界面测试 (UI Test)
1.布局是否合理,2个 Testbox 和一个按钮是否对齐
2.Testbox和按钮的长度、高度是否复合要求
3.界面是否美观
4.图片,颜色,字体,超链接,是否都显示正确
性能测试 (performance test)
1.打开登录页面,需要几秒
2.输入正确的用户名和密码后,登录成功跳转到新页面,不超过5秒
3.能支持多少个用户同时登陆
安全性测试 (Security test)
1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
2.用户名和密码是否通过加密的方式,发送给Web服务器
3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
4.用户名和密码的输入框,应该屏蔽SQL 注入攻击
5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
6.错误登陆的次数限制(防止暴力破解)
可用性测试  (Usability Test)
1.是否可以全用键盘操作,是否有快捷键
2.输入用户名,密码后按回车,是否可以登陆
兼容性测试(Compatibility Test)
1.主流的浏览器下能否显示正常(IE/Edge, Firefox, Chrome, Safari 等)
2.不同的平台是否能正常工作,比如Windows, Mac
3.移动设备上是否正常工作,比如iPhone, Andriod
4.不同的分辨率
5.不同的浏览器大小(浏览器最大化, 和非最大化)
软件辅助性测试 (Accessibility test)
软件辅助功能测试是指测试软件是否向残疾用户提供足够的辅助功能
比如高对比度下能否显示正常 (视力不好的人使用)

3;推送消息如何测试?
1、检查Push消息是否按照指定的业务规则发送。
2、检查不接收推送消息时,用户不会在接收到Push消息。
3、如果用户设置了免打扰的时间段,检查在免打扰时间段内,用户接收不到Push。在非免打扰时间段内,用户能正常收到Push。
4、当Push消息是针对登录用户的时候,需要检查收到的Push与用户身份是否相符,没有错误的将其他人的消息推送过来。一般情况下,只对手机上最后一个登录用户进行消息推送。
5、测试Push时,在开关机、待机状态下执行推送,消息及其推送跳转的正确性。
6、push消息时,会有红点展示,推送消息阅读前后数字的变化是否正确;
7、应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转是否正确。
8、多条推送的合集的显示和跳转是否正确。

4;app闪退是由哪些原因造成的?
 一般App闪退是由于以下几个原因造成的.
   1.缓存垃圾过多
       由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也会出现闪退情况.
  2. 运行的程序过多,导致内存不足
  3.应用版本兼容问题
         如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本在调试中,也会造成应用闪退。
          解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退,可能是应用在改版调试,可卸载后安装旧版。
 4… 检查APP中访问网络的地方,组件中的ImageView是否可以正常的下载并显示到app 页面上。   
  5.检查APP的sdk和手机的系统是否兼容。
 6.在一些特定情况下的闪退,比如播放视频,在Android5.0 升级到Android6.0的时候,有些系统API老版本有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退问题.

5.测试过程中遇到app出现ANR(应用程序反应)的时候怎么来处理
可以先把日志过滤出来: adb logcat | findstr xxxxx(过滤日志信息) ,然后再搜索其中的关键字,比如:exception、crash,看看是那些方法或者异常导致了问题的发送,初步定位问题原因后,可以交给开发人员去具体查找深层原因并修复。

5;测试过程中遇到app出现ANR(应用程序未响应)你会怎么来处理?
可以先把日志过滤出来: adb logcat | findstr xxxxx(过滤日志信息) ,然后再搜索其中的关键字,比如:exception、crash,看看是那些方法或者异常导致了问题的发送,初步定位问题原因后,可以交给开发人员去具体查找深层原因并修复。

6;如何查看移动端的日志以及会出现哪些异常?

常见的异常
NullPointerException  空指针
ClassCastException  类型转换异常
IndexOutOfBoundsException  下标越界异常
ActivityNotFoundException Activity  未找到异常
IllegalStateException  非法状态异常
ArrayIndexOutOfBoundsException  数组越界异常
SecurityException  安全异常
NoSuchMethodException  方法未找到异常
SQLException  操作数据库异常

7;app主要测试哪些,以及如何展开测试的工作?
功能测试:
1.业务逻辑正确性测试:依据:产品文档->测试用例编写
兼容性测试:
1.系统版本:Android:官方版本,定制版本;IOS:官方提供版本
2.分辨率:720 * 1280 1080* 1920
3.网络情况:2g 3g 4g 5g Wi-Fi
异常测试
1.热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启
2.网络切换和中断恢复:网络切换;中断恢复:
3.电话信息中断恢复
升级,安装,卸载测试
1.升级测试:临近版本升级(1.0->1.1);跨版本(1.0->…->2.2)
2.安装测试:首次安装;覆盖安装(同版本,不同版本覆盖);卸载后安装
3.卸载测试:首次卸载;卸载安装后在卸载
健壮性测试
1.手机资源消耗:cpu,内存
2.流量消耗:图片,数据,视频
3.电量测试
4.崩溃恢复

8:app的性能测试的关注点有哪些?
1、内存
2、CPU
3、流量
4、电量
5、启动速度
6、滑动速度、界面切换速度
7、与服务器交互的网络速度

9;如何对app做弱网测试?
1、SIM卡的网络切换
手机-设置-移动网络设置-网络类型选择
3G、4G卡都可以设置关闭3G/4G,只走2G网络。
2、具体弱网场景测试,常见场景包括:地铁/巴士、电梯、楼梯间、停车场
3、使用虚拟机模拟网络速度,如用树莓派搭建的弱网测试仪
4、使用软件进行网络代理,模拟不同的网络带宽、延时率、丢包率

10;常见的ADB命令MONKEY命令?
常见的MONKEY命令
原理概括:adb devices—了解包名–adb shell monkey -p 包名 -v 运行次数(多个参数的组合形成不同的用例以求最大的覆盖)–当崩溃或无响应时分析monkey日志
常规monkey命令(可直接在项目里使用):
adb shell monkey -p com.jiochat.jiochatapp --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000>d:\b.log
重现bug:monkey日志搜索关键词ANR exception,将之前的事件重新操作,尤其是seed值要一模一样,如monkey -p 包名 -v seed 0 500
日志分析:查看是否有crash等关键字,找上下文,进行简单分析将你所能定位的错误信息发给开发。
该工具用于进行压力测试。 测试人员结合monkey 打印的日志 和系统打印的日志,开发人员修改测试中出现的问题。Monkey 是SDK中附带的一个工具,所有的事件都是随机产生的,不带任何人的主观性。
Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar。
Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;这样就可以通过在shell窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试了。
二、monkey测试环境搭建:运行前安装adb(MONKEY测试使用的是ADB命令,因此只需要配置ADB环境即可。)
1.pc端下载adb命令包,解压后放到C盘目录下(也就是jdk,sdk,下载地址:http://pan.baidu.com/s/1pJ6Yqs7,jdk安装,sdk解压即可,并配置环境变量,path加上platform-tools和tools的目录路径)
2.手机通过usb连接电脑,自动安装usb驱动,连接成功
3.验证adb命令能否运行
pc端进入cmd命令行—进入C:\tmg目录下–运行adb shell,出现$符号证明adb命令运行成功,进入shell模式
三、手机设置
手机屏幕超时设置为从不关闭,防止手机进入锁屏状态。
   以htc手机为例:进入设置-显示–屏幕待机–设置为从不关闭。
四、运行monkey
运行方式有三种:a.pc机上 adb shell monkey +参数  b pc机输入adb shell进入到手机的安卓设备后再monkey+参数 C手机设备上安装一个模拟器手机执行monkey+参数(手机模拟器可以通过百度搜索或360手机助手搜android terminal,安装即可,可以在模拟器的命令行中输入mokey +参数)
下面是第一种方法:
1.查看包名:查看电脑中某一位置的apk文件的包名:PC打开CMD-进入TMG目录-运行设备–查看包名aapt dump badging *.apk(apk文件的路径,可以直接拖拽)。
或者直接查看手机中存在的apk包,进入adb shell 命令后—手机的data/data文件夹–ls查看所有包名 找到要测apk的包名
2.运行monkey,对此包进行300次无规律点击。
或者运行monkey,对此包进行300次无规律点击后将日志导出到电脑的某一位置
adb shell -p 包名 -v 点击数 >电脑某一位置
3、测试停止后,查看导出的monkey日志,发现问题。
在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。
首先我们需要查看Monkey测试中是否出现了ANR或者异常,无响应问题(ANR问题):在日志中搜索“ANR ”(此处有空格), 崩溃问题:在日志中搜索“Exception”,快速定位到关键事件信息 。然后查看Monkey里面出错前的一些事件动作,并手动执行该动作,找出重现步骤,给开发。
五、monkey命令详解
monkey -pcom.tencent.mtaexample -s 23  --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
        1.   -p后面接着的对应的包名,如果是整机测试,就不需要 -ppackage_name
        2.   -s后面是对应的种子数,好像就是操作步骤,根据她们测试的经验,一般种子数在23,同步她们测试的结果,一般种子的个数固定为23,和她们选择的操作步骤就是同步的。
        3.   --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止。这里是防止Monkey测试终止。
        4.   -v 指的是Monkey测试时打印log级别。
5.   100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在100000次就可以了;如果是整机,一般设置在500000次。
/data/local/tmp/log.txt测试的log记录在手机上/data/local/tmp/ 下面的log.txt里面,这个名字可以自己写。
        6.   2>&1 固定的写法,这个也很重要,代表的意思是中间忽略的东东的日志一并输入到指定的文件中。
        7.   最后单独的一个"&" 是一旦Monkey测试开始了,之后可以拔掉数据线,不会影响Monkey测试。
        8.   测试所有模块  monkey  -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &
六、monkey常用参数详解
-v  日志详细程度
Level 0  :  adb shell monkey  -p fishjoy.control.menu  -v 100   最简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。
Level 1  :  adb shell monkey  -p fishjoy.control.menu  -v  -v 100  提供了较为详细的测试信息,如逐个发送到Activity的事件信息
Level 2  :  adb shell monkey  -p fishjoy.control.menu  -v  -v  -v 100 提供了更多的设置信息,如测试中选中或未选中的Activity信息
比较常用的是-v -v -v,一般会保存到指定文件中供开发人员查找bug原因时使用
-s(随机数种子)
指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
示例: monkey测试1:adb  shell  monkey  -p fishjoy .control.menu  –s 10  100
          monkey测试2:adb  shell  monkey  -p fishjoy .control.menu  –s 10  100
–throttle <毫秒> 
指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。
示例:adb  shell monkey -p fishjoy.control.menu  --throttle 3000 100 
-p <允许的包名列表> 
用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。

–ignore-security-exception

作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

–ignore-timeouts

作用:通常,应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

–ignore-crashes

作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

–pct-touch
作用:调整触摸事件的百分比.(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)比如一个应用80%的操作都是触摸,那就可以将此参数的百分
比设置成相应较高的百分比。如触摸返回、触摸签到等
–pct-motion
调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)也就是直线滑动事件如从左到有滑动解锁

–pct-trackball
作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件)如不规则滑动解锁
–pct-nav 导航,现在手机基本没有导航了
—pct-syskeys 按键消息比例,主页、后退、音量增减
–pct-anyevent 其他不常用的按键比例的设置,不常用
–hprof  monkey测试完成后生成内存快照,data/misc路径下生成,不常用,比较占空间

–ignore-security-exceptions  忽略权限问题的
–kill-process-after-error 当错误发生时杀进程
–monitor-native-crashes 监视崩溃时的本地代码
七、杀monkey进程
如果想中断运行中的monkey CTRL+C
adb shell ps | grep monkey  返回进程号
adb shell kill [刚才查到的进程号]
app包名查看:
a.手机安装包名查看器’
 b.aapt命令  aapt dump badging *.apk
c、源码下的AndroidManifest.xml文件查看
d.adb logcat抓取当前Android机运行的app的包名(  I/ActivityManager(数字): Displayed 包名/类
名: +ms )
命令行输入 adb logcat >e:\bag.txt
手机操控app,ctrl+c停止
去e:\bag.txt这个文件下搜索关键字如Displayed ,一般都能找到

常见的ADB命令

  1. adb devices
    查看当前连接的设备(连接计算机的Android设备或者模拟器)。

2.adb install
adb install <apk文件路径>,将指定的apk安装到设备上,安装的apk包会放在/data/app目录下。
几个参数:
-r 强制安装
-d(真机,多个设备中只有一个真机时适用)
-e(模拟器,多个设备中只有一个模拟器时适用)
-s(指定设备,后接序列号)
adb –s 44a188f9 install –r test.apk(其中44a188f9即序列号,通过adb devices可获取)
 
3.adb uninstall
adb uninstall <apk包名>
adb uninstall –k <apk包名>
-k参数为卸载软件时保留配置和缓存文件
 
4.adb reboot
重启android设备
 
5.adb shell
通过adb shell 命令,就可以进入设备或者模拟器的shell环境了,在这个Linux shell中,我们就可以执行各种Linux命令了。
如果只想执行一条shell命令,就可以采用:adb shell [shell_command]
在实际使用中,经常与grep或findstr一起使用,起到过滤作用,查看自己需要的关键信息。
 
6.adb shell su
前提手机已经root。获取adb shell的root权限。
使用su提权,用户命令提示符有$变成#,如果手机没有root,会提示su:permission denied。
 
7.adb shell ps/top
查看当前终端中的进程信息,如pid等。
 
8.adb shell am/pm
am全称为activity manager,可使用am命令模拟各种系统的行为,如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等。
如:adb shell am start <apk包名>/:启动一个activity。
pm全称为package manager,利用pm命令可模拟android行为或查询设备上的应用等。
如:adb shell pm list packages
列出当前设备所有已安装的程序的包名。

说明:
管道符“|”:可以把标准的输入流与标准的输出流进行合并,或者把某个命令的标准输出流作为另一个命令的标准输入流。
exit退出shell。
由于grep为linux命令,运行单条adb shell 时并没有进入linux shell环境,并不能用grep等其他linux命令,只能用window cmd的命令。在这里可以用findstr来代替grep,使用方法为 findstr/grep [keyword]
更详细的内容可查看参考文献3和参考文献4。
对于常用的linux命令和常用的windows 控制台命令,以后再作总结。
 
9.adb pull 和 adb push
adb pull <设备中的文件路径> <本地路径>:从模拟器或设备中复制文件到本地。
adb push <本地文件路径> <设备中的路径>:将本地文件或目录复制到模拟器或设备。
这里还涉及到一个权限的问题,在后续的博文中再作介绍。
 
10.adb shell dumpsys
Android提供的dumpsys工具用于查看感兴趣的系统服务信息与状态。
参考下表:

11.adb shell monkey
跑monkey是android自动化测试的一种手段,所谓monkey测试就是模拟用户的按键输入,触摸屏输入,手势输入等。当Monkey程序在模拟器或设备运行的时候,如果用户比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey的随机重复的方法对apk作压力测试,来测试android app的稳定性。
如下为测试腾讯新闻apk的一个简单实例:

说明:第一个-s指定设备,如果只连接了一台设备,可不用该参数。
-p <apk包名>只允许系统启动指定的app,如果不指定,将允许系统启动设备中的所有app,也可指定多个包。
–throttle <毫秒数> 指定用户操作(事件)间的时延。
–ignore-crashes 指定当应用程序崩溃时,Monkey依然发送事件,直到事件计数完成。
–ignore-timeouts 当应用程序发生ANR错误时,Monkey依然会发送事件,直到事件计数完成。
第2个-s,用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
-v 用于指定反馈信息级别,总共分为level 0、level 1、level 2三个级别,级别越高,输出的日志越详细。
最后的数字(这里是500):表示Monkey程序模拟500次随机用户操作事件。

输出测试结果到D:\monkeylog.txt
更详细的参数可查看参考文献5。
部分测试结果如下:

对于测试结果的分析,通过搜索关键词来定位错误,主要包括以下四个方面:
1)ANR(Application Not Response):程序无响应,一般主线程超过5秒没处理就会出现ANR错误。通过搜索ANR关键词来定位关键的事件信息。除了导出日志外,还可以将/data/anr/目录下的trace.txt文件导出,用来定位分析问题。使用>adb pull /data/anr/trace.txt d:\ 将trace.txt文件导出到d盘。
2)ForceClosed或其他异常退出信息:通过搜索Fatal关键词来定位。
3)崩溃问题:通过搜索Exception关键词来定位。
4)发生异常后,通过搜索Crash关键词来定位到详细的堆栈信息。
 
 12.kill
kill用来中止一个进程。
比如我们在跑monkey的时候,怎么强制关闭monkey呢,可以用kill <monkey进程PID>

11;安卓的四大主键?
1  活动 (Activity)
   活动是最基本的Andorid 应用程序组件,应用程序中,一个活动通常就是一个单独的屏
幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来, 活动类将会显
示由视图控件组成的用户接口,并对事件做出响应。 大多数的应用是由多屏幕显示组
成。例如,一个文本信息的应用也许有一个显示发送消息的联系人列表屏幕, 第二个
屏幕用来写文本消息和选择收件人, 再来一个屏幕查看消息历史或者消息设置操作等。
这里每一个这样的屏幕就是一个活动,很容易实现从一个屏幕到一个新的屏幕并且完成
新的活动。  在某些情况下当前的屏幕也许需要向上一个屏幕动提供返回值–比如让用户
从手机中挑选一张照片返回通讯录做为电话拨入者的头像。  
当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态并且压入历史堆栈中。用户可
以通过回退操回到以前打开过的屏幕。我们可以选择性的移除一些没有必要保留的屏
幕,因为Android 会把每个从桌面打开的程序保留在堆栈中。
Intent 和 Intent Filters
调用 Android 专有类  Intent 进行构屏幕之间的切换。 Intent 是描述应用想要做什么。
Intent 数据结构两最重要的部分是动作和动作对应的数据。典型的动作类型有:MAIN
(活动的门户)、VIEW、PICK、EDIT 等。而动作对应的数据则以 URI 的形式进行表
示。例如:要查看某一个人的联系方式,你需要创建一个动作类型为 VIEW 的intent,
以及一个表示这个人的URI。
与之有关系的一个类叫IntentFilter。当 intent 被要求做某事的时候,intent filter用于描
述一个活动(或者 BroadcastReceiver,看下面)能够操作哪些 intent。一个活动如果要显示一个人的联系方式时,需要声明一个 IntentFilter,这个 IntentFilter要知道怎么去处
理 VIEW 动作和表示一个人的 URI。 IntentFilter需要在 AndroidManifest.xml中定义。 
通过解析各种intent,从一个屏幕切换到另一个屏幕是很简单的。当向前导航时,活动
将会调用startActivity(myIntent)方法。然后,系统会在所有安装的应用程序定
义的 IntentFilter中查找,找到最匹配 myIntent 的 Intent 对应的活动。新的活动接收
到 myIntent 的通知后, 开始运行。 当 start 活动方法被调用将触发解析 myIntent 的动作,
这个机制提供了两个关键好处:  
·  活动能够重复利用从其它组件中以Intent 的形式产生的一个请求  
·  活动可以在任何时候被一个具有相同IntentFilter的新的活动取代  
2   广播接收器
   你可以使用BroadcastReceiver来让你的应用对一个外部的事件做出响应。比如:当电
话呼入时,数据网络可用时,或者到了晚上时。BroadcastReceivers 不能显示 UI,它
只能通过  NotificationManager 来通知用户这些有趣的事情发生了。
BroadcastReceivers 既可以在AndroidManifest.xml中注册,也可以在代码中使用
Context.registerReceiver()进行注册。但这些有趣的事情发生时,你的应用不
必对请求调用BroadcastReceivers,系统会在需要的时候启动你的应用,并在必要情况
下触发 BroadcastReceivers。 各种应用还可以通过使用Context.sendBroadcast()
将它们自己的intent broadcasts 广播给其它应用程序。
3   服务
    一个服务是具有一段较长生命周期且没有用户界面的程序。比较好的一个例子就是一个
正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个
活动,让使用者可以选择歌曲并播放歌曲。 然而,音乐重放这个功能并没有对应的活
动,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,
媒体播放器这个活动会使用Context.startService() 来启动一个服务,从而可以
在后台保持音乐的播放。同时,系统也将保持这个服务一直执行,直到这个 service 运
行结束。(你可以通过阅读 Life Cycle of an Android Application 获取更多关于服务的介
绍). 另外,我们还可以通过使用 Context.bindService() 方法,连接到一个服务
上(如果这个服务还没有运行将启动它)。当连接到一个服务之后,我们还可以通过服
务提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播
等操作。
4   内容提供器
应用程序能够将它们的数据保存到文件、SQLite 数据库中,甚至是任何有效的设备中。
当你想将你的应用数据与其它的应用共享时,内容提供其将会很有用。一个内容提供器
类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种
数据类型。 更详细的内容提供器资料,可以参考附带文档中的  Accessing Content
Providers。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值