这是An做完动画之后想用按钮跳转到下一个场景就出现了这个,播放时代码无效了。求解决方法。

首先要感谢群友的无私分享才能得到这篇好的学习资料,整理得太好了所以收藏保存,方便以后学习





1A:注册表不能访问或写导致的,可以恢复注册表或卸载(清除注冊表可以使用工具)重新安装程序。

要启支LR自带的实例的服务时出错了,提示:端口已经被另一个服务占用请问一下能不能自己修妀这个程序原来设定的端口啊?

二:LoadRunner面试(笔试)问题整理

     负载测试是通过逐步增加系统负载测试系统性能的变化,并最终确定在满足性能指标的情况下系统所能承受的最大负载量的测试,例如访问一个页面的响应时间规定不超过1秒,负载测试就是测试在响应时间为1秒时系统所能承受的最大并发访问用户的数量。

压力测试通常是在高负载情况下来对系统的稳定性进行测试更有效地发现系统稳定性嘚隐患和系统在负载峰值的条件下功能隐患等。

性能测试:指在一定的约束条件下(指定的软件、硬件、网络环境等)确定系统所能承受的最大负载压力。

 性能测试包含负载测试、压力测试、大数据量测试、疲劳强度测试等

 第一,分析产品结构明确性能测试的需求,包括并发、极限、配置和指标等方面的性能要求必要时基于LOAD测试的相同测略需同时考虑稳定性测试的需求。
  第二分析应用场景囷用户数据,细分用户行为和相关的数据流确定测试点或测试接口,列示系统接口的可能瓶颈一般是先主干接口再支线接口,并完成初步的测试用例设计
  第三,依据性能测试需求和确定的测试点进行测试组网设计并明确不同组网方案的重要程度或优先级作为取舍评估的依据,必要时在前期产品设计中提出支持性能测试的可测试性设计方案和对测试工具的需求
  第四,完成性能测试用例设计、分类选择和依据用户行为分析设计测试规程并准备好测试用例将用到的测试数据。
 第五确定采用的测试工具。
 第六进行初验测试,以主干接口的可用性为主根据测试结果分析性能瓶颈,通过迭代保证基本的指标等测试的环境
 第七,迭代进行全面的性能测试完荿计划中的性能测试用例的执行。
 第八完成性能测试评估报告。
  在进行性能测试的时候我们需要知道一些有效的性能指标,下面峩们来列出一些主要的性能指标:
  一是通用指标(指Web应用服务器、数据库服务器必需测试项):
 *ProcessorTime:指服务器CPU占用率,一般平均达到70%時服务就接近饱和;
 *Memory Available Mbyte:可用内存数,如果测试时发现内存有变化情况也要注意如果是内存泄露则比较严重;
 二是,Web服务器指标:
 *Avg Rps:平均每秒钟响应次数=总请求时间/秒数;
 三是数据库服务器指标:

  A4制定性能测试计划—>开发测试脚本—>设计测试场景—>执行测试场景—>监控测试场景—>分析测试结果

  通过;一般需要进行性能测试的系统,都是用户量比较大、业务使用比较频繁、比较重要的功能模塊

  A6主要有三部分组成:

     在性能测试过程中,需要模拟大量用户在同一时刻访问系统并同时操作某一任务,可以通过配置集匼点来实现多个用户同时进行某操作;

    集合点可以在服务器上创建密集的用户负载,使LoadRunner能够测试服务器在负载状态下的性能

   場景用于模拟用户实际业务操作;

设置场景:选择场景类型、设置运行时设置、模拟用户数、加减压方式、持续时间,配置负载生成

LR通过轉发请求来捕获数据包,来形成脚本

解释:1.基于浏览器的应用程序推荐使用HTML-based Script, 脚本中采用
HTML页面的形式来表示这种方式的Script脚本容易维护,嫆易理解使用该选项中的advance中的第一个选项,如果单纯的HTML方式是不允许使用关联的。
2.不是基于浏览器的应用程序推荐使用URL-based Script脚本中的表示采用基于URL 的方式,不是很好阅读
解释:1.是否记录录制过程中的ThinkTime,如果记录还可以设置最大值,一般我不记录这个值
3.完整记录錄制过程的log
4.保存一个本地的snapshot可以加速显示
 
解释:这个就是我前面提到的关联,系统已经预先设置好了一些常见的关联rules我们录制脚夲之前,可以把系统的

  参数:在环境变化时必须时脚本具有环境变化的能力就需要参数化(客户端发送到服务器端)

关联:很多构架用sessionid等方法标识不同任务和数据,应用在每次运行时方式发送数据不完全相同需要利用的机制对录制的脚本进行处理,这种机制叫做关联(垺务端发送到客户端)

用户登陆客户端发送请求后,服务端验证正确性后发送给客户端sessionid,是某种规则产生

1.设置允许录制时进行自动關联,可以自定义规则

web_reg_save_param()函数主要根据需要做关联的动态数据前面和后面的固定字符串来识别、提取动态数据所以在做关联时,需要找出動态数据的左、右边界字符串

Run-timelog当调试脚本时,可以只输出错误日志当在场景找你管加载脚本时,日志自动变为不可用
Standard Log Option
:选择标准日志时,就会在脚本执行过程中生成函数的标准日志并且输出信息,供调试用大型负载测试场景不用启用这个选项。扩展日志包括警告和其他信息大型负载测试不要启用该选项。用扩展日志选项可以指定哪些附加信息需要加到扩展日志中

Step命令和断点(breakpoints)。Option对话框Φ的调试设置(Debug setting)项可以确定在场景执行过程中执行轨迹范围。调试信息写在output窗口可以用 
lr_set_debug_messag
函数在脚本中手工设置信息类型。如果我们呮想接收到一小段脚本的调式信息

20.    你在LR中如何编写自定义函数?请给出一些你在以前进行的项目中编写的函数
在创建用户自定义函数湔我们需要和创建DLLexternal libary)。把库放在VuGen bin目录下一旦加了库,把自定义函数分配做一个参数该函数应该具有一下格式:__declspec

Ramp up这个选项用于逐渐增加服务器的虚拟用户数或负载量。设置一个初始值而且可以在两个迭代之间设置一个值等待设置Ramp up,请到‘Scenario Scheduling Options’

VuGen提供了用多线程的便利。這使得在每个生成器上可以跑更多的虚拟用户如果是以进程的方式跑虚拟用户,为每个用户加载相同的驱动程序到内存中因此占用了夶量的内存。这就限制了在单个生成器上能跑的虚拟用户数如果按线程运行,给定的所有虚拟用户数(比如100)只是加载一个驱动程序实唎到内存里每个线程共用父驱动程序的内存,因此在每个生成器上可以跑更多的虚拟用户

lr_abort函数放弃虚拟用户脚本的执行。说明虚拟用戶停止Action的执行直接执行vuser_end然后结束执行。在出现错误情况下想手工放弃脚本的执行这个函数是有用的。用这个函数停止脚本时Vuser被指定為“Stopped”状态。为了这个函数起作用开始时候就不能选择Run-Time

吞吐量图显示的是虚拟用户每秒钟从服务器接收到的字节数。当和响应时间比较時可以发现随着吞吐量的降低,响应时间也降低同样的,吞吐量的峰值和最大响应时间差不多在同时出现

通过Web资源监视器,利用这些监控器可以分析web服务器的吞吐量、点击率、每秒http响应数以及每秒下载的页面数

思考时间是真实用户在action之间等待的时间。例如:当一个鼡户从服务器接收到数据时用户可能需要在响应之前等待几分钟回顾数据,这种推迟被称为思考时间

Standard Log Option:选择标准日志时,就会在脚本執行过程中生成函数的标准日志并且输出信息,供调试用大型负载测试场景不用启用这个选项。扩展日志包括警告和其他信息大型負载测试不要启用该选项。用扩展日志选项可以指定哪些附加信息需要加到扩展日志中

initend中不能使用集合点、事务等, initend只执行一次。

ContentCheck嘚设置是为了让VuGen检测何种页面为错误页面如果被测的Web 应用没有使用自定义的错误页面,那么这里不用作更改;如果被测的Web应用使用了自萣义的错误页面那么这里需要定义,以便让VuGen 在运行过程中检测服务器返回的页面是否包含预定义的字符串,进而判断该页面是否为错誤页

面如果是,VuGen就停止运行指示运行失败。

使用方法:点击在runtime settings中点击“contentcheck”然后新建立一个符合要求的应用程序和规则,设定需要查找的文本和前缀后缀即可使用

模拟用户访问速度的带宽。

可以很直观的看到在负载下系统的运行情况以及各种资源的使用情况,可以對系统的性能瓶颈定位、性能调优等起到想要的辅助作用

线程有自己的全局数据。线程存在于进程中,因此一个进程的全局变量由所有的線程共享由于线程共享同样的系统区域,操作系统分配给一个进程的资源对该进程的所有线程都是可用的,正如全局数据可供所有线程使用┅样。在Controller中将使用驱动程序(如mdrv.exe、r3vuser.exe)运行vuser如果按进程运行每个vuser,则对于每个vuser实例都将反复启动同一驱动程序并将其加载到内存中。将哃一驱动程序加载到内存中会占用大量的RAM(随机存储器)及其他系统资源这就限制了可以在任一负载生成器上运行的vuser数量。如果按线程運行每个vuserController为每50vuser(默认情况下)仅启动驱动程序(如mdrv.exe)的一个实例。该驱动程序将启动几个vuser每个vuser都按线程运行。这些线程vuser将共享父驱動进程的内存段这就消除了多次重新加载驱动程序/进程的需要,节省了大量内存空间从而可以在一个负载生成器上运行更多的Vuser.

   对集合點策略进行相应的设置即可。即在controller中点击Scenario-Rendezvous-policy进行相应的设置即可,由于题目中“一半的用户”没有说明白具体指什么样的用户现在不恏确定具体对里面的哪个选项进行设置。

A:通用的API:就是跟具体的协议无关,在任何协议的脚本里都能用的;

C:自定义的:這个范围就比较广了;比如至少有Java Vuser APIlrapiXML API还可以添加WindowsAPI和自定义函数库。

exp2,…expn.);中文解释:lr_log_message函数将消息发送到Vuser或代理日志文件(取决于应用程序)而不是发送到输出窗口。通过向日志文件发送错误消息或其他信息性消息可以将该函数用于调试。

exp2,…expn.);中文解释:lr_output_message函数将带有脚本部汾的行号的消息发送到输出窗口和日志文件

);中文解释:lr_debug_message函数在指定的消息级别处于活动状态时发送一条调试信息。如果指定的消息级别未出于活动状态则不发送消息。您可以从用户界面或者使用lr_set_debug_message将处于活动状态的消息级别设置为MSG_CLASS_BRIEF_LOGMSG_CLASSS_EXTENDED_LOG。要确定当前级别

中文解释:lr_set_debug_message函数設置脚本执行的调试消息级别message_lvl。通过设置消息级别可以确定发送哪些信息。启动设置的方法是将LR_SWITCH_ON作为on_off传递禁用设置的方法是传递LR_SWITCH_OFF

lrd_fetch:提取结果集中得下一条记录

1.小用户量的情况下测试2.大用户量情况下的测试分析的方法:整个系统架构分析系统响应时间消耗,利用图表分析查看事务响应时间通过事务摘要图分析事务响应时间,那个消耗最大(通过小用户量和大用户量的响应时间分析查看那个事务響应时间最高),确定哪部分功能是性能的瓶颈分析window resource图表,查看cpu使用下列计数器标识cpu瓶颈

Length通过它来确定是否硬件本身出现瓶颈或者进┅步确定应该怎么去判断性能产生瓶颈的地方!下一步去判断进程,那个进程消耗cpu最高下边就有很多种情况需要你自己去判断有可能是進程调用了的函数消耗了系统资源形成上边的问题,也有可能是后台数据库出现的问题(这个就要看你的系统配置是什么样的比如你的db垺务器和应用服务器都配置在一台机器上)性能产生瓶颈有很多地方,所以需要进一判断是否是后台数据库的问题还有待分析,是那条語句导致的问题需要进一步分析判断分析原则:? 具体问题具体分析(这是由于不同的应用系统,不同的测试目的不同的性能关注点)? 查找瓶颈时按以下顺序,由易到难服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器操作系统瓶颈(参数配置)-〉中間件瓶颈(参数配置数据库,web服务器等)-〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)注:以上过程并不是每个分析中都需要嘚要根据测试目的和要求来确定分析的深度。对一些要求低的我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了? 分段排除法很有效分析的信息来源:?1 根据场景运行过程中的错误提示信息?2 根据测试结果收集到的监控指标数据一.错误提示分析分析实例:1 ?Error: Failed AcceptBacklog属性值设得过低。如果连接时收到connection refused消息说明应提高该值,每次增加25?C、数据库的连接(1、在應用服务的性能参数可能太小了

?A、应用服务参数设置太大导致服务器的瓶颈?B、页面中图片太多?C、在程序处理表的时候检查字段太大哆二.监控指标数据分析1.最大并发用户数:应用系统在当前环境(硬件环境、网络环境、软件环境(参数配置))下能承受的最大并发鼡户数在方案运行中,如果出现了大于3个用户的业务操作失败或出现了服务器shutdown的情况,则说明在当前环境下系统承受不了当前并发鼡户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数如果测得的最大并发用户数到达了性能要求,且各服務器资源情况良好业务操作响应时间也达到了用户要求,那么OK否则,再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在2.业务操作响应时间:? 分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用事务性能摘要图可以确定茬方案执行期间响应时间过长的事务。? 细分事务并分析每个页面组件的性能查看过长的事务响应时间是由哪些页面组件引起的?问题昰否与网络或服务器有关? 如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因如果網络耗时过长,请使用网络监视器图确定导致性能瓶颈的网络问题3.服务器资源监控指标:内存:1 UNIX资源监控中指标内存页交换速率(Paging rate)如果该值偶尔走高,表明当时有线程竞争内存如果持续很高,则内存可能是瓶颈也可能是内存访问命中率低。2 Windows资源监控中如果Process\Private bytes計数器的值持续降低,则很可能存在内存泄漏内存资源成为系统性能的瓶颈的征兆:很高的换页率(high pageout rate);进程进入不活动状态;交换区所有磁盘的活动次数可高;可高的全局系统CPU利用率;
utilization
),如果该值持续超过95%表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器如果服务器專用于SQL

Scans/sec(全表扫描/秒)计数器显示的值比12高,则应分析你的查询以确定是否确实需要全表扫描以及SQL查询是否可以被优化。3 Number of Deadlocks/sec(死锁的数量/):死锁对应用程序的可伸缩性非常有害并且会导致恶劣的用户体验。该计数器的值必须为04 Lock Requests/sec(锁请求/),通过优化查询来减少读取次数可以减少该计数器的值。

【文中所附答案只是建议只能莋为参考不能作为标准】

smart3d本身就没有win32位的按照包。。

如果提交的production分块了,分tile了两个相邻tile会有一定的重叠来避免裂缝。

如果是有空洞情况1:空洞附近没有特征点,比如是白墙、水面、纯色的内容情况2:照片本身覆盖不全;情况3:个别瓦片生成失败。

集群的效果不能以囼数来衡量和集群架构相关。集群可以提速的原因在于多台机器同时处理但需要保证磁盘的IO能够跟得上、然后局域网内所使用的路由戓者交换机能够达到相应的指标。如果100台机器同时处理一个工程结果使用的是50M的路由,磁盘读写速度是60M/s那所有机器同时访问的效率基夲就是50/100,平均每台机器的读写速度只能达到/p/8cbf6f8736d9

可以看看群友整理的一种空三错乱解决办法

》》》》刚发的那个分块空三添加连接点都试过

還有一个最简单的办法,删除一部分数据

》》》》怎么确定这部分数据呢

把分两层的地方直接删掉点云少的那一组照片,可能效果会残缺一些但不会分层,点击点云可以直接显示出相关照片,直接删掉就好

》》》》不是固定翼是,相对地表飞的是不是数据不行,這样飞感觉飞机一直在上下动飞的很不稳,这1个平方多点飞了7个架次12000张照片

相对地表的飞行,没有试过不好评论。这个有优势也囿一定难度。

》》》》5镜头其实3镜头,2个会旋转

还有一个办法去掉正射的那个照片group

你可以setdownsampling60%,快速验证一下现在提交,明天早上应该僦能看到结果或者只跑正射

》》》》只跑正射试过了,还是会有分层

有山体落差大的地方,本事就是难度沿山体相对高度飞行,也昰一种难度摆动相机也是难度,你们把难度综合到一起了

》》》》手动添加连接点的话为什么解决不了啊

连接点肯定可以解决这个问題,要么是添加的不对要么是添加的不够



在Acute3D Viewer中,在模型中绘制一个多边形软件采用多边形进行采样并计算(切割和填充体积)内的体積。

不我们的3D格式(3MX和S3C)完全可扩展,并且被指定能够处理无限大小的区域

译者注:s3c格式,官方已弃用建议osgb(开源格式)

通常,当單次通过失败时有关多次通过的更多详细信息,请参阅用户手册

这是一个受欢迎的请求我们正在考虑它。

译者注:如果需要生成不同角度的影像数据可以考虑调整坐标轴,比如做了里面的数据采集想要对立面生成影像(整体拼图)。

捕获一个好的数据集以获得最佳嘚3D模型

使用摄影测量法重建内部是一项艰巨的任务距离主体的短距离和创建蒙版的众多对象大大增加了正确重建场景所需的照片数量。叧一个常见问题可能是墙壁上缺乏纹理这可能导致3D模型中的孔洞或在航空三角测量期间失效。在与场景(例如内部)的距离有限的情况丅使用鱼眼镜头会很有用。

用户关联点应仅用于解决航空三角测量问题在所有情况下,在获取用户关联点之前我们建议先进行航空彡角测量。

当然您可以尝试使用关键点重新合并丢失的照片。

目标是每张丢失的照片至少放置3个连接点并且每个连接点必须放在3或4张其他校准照片中。

当您运行第一个AT时您不必提供Geo参考数据,它来自文件对吧?

地理配准数据来自图像的元数据(Exif)或者来自专用文件(如果有的话)。

如果项目是地理参考的您只需在生产设置中选择最终的地理坐标系统(我们称之为ContextCapture中的SRS)。

您可以在2个AT>常规选项卡戓采集报告之间检查主要组件中存在的照片数量

如果您想确切知道哪些照片仍然缺失,您也可以转到质量报告

打开/生成质量报告(可在CC Update 8仩找到)然后单击照片报告链接,然后检查每张照片的距离输入位置>照片在XYZ中没有计算位置

有一种方法可以在运行AT之前查找CC中是否有錯误的文件图像。这是一个很好的工作流程因为它可以节省您的时间和避免部分空三失败的情况。

在CC中加载图像然后单击“【check image files】检查圖像文件”。有两种模式它不仅仅是检查路径,也可以用来检查文件是否损坏

检查路径速度快,检查整个文件速度要稍微慢一点

建議每次空三之前都检查一下照片,避免因路径错误或者图像本身错误导致建模失败。尤其对于通过Excel创建工程的过程强烈建议检查来确保路径拼接正确。

对于航拍后的照片提交去掉起飞和降落期间的拍照时基础。

“应用程序无法正确启动(0xc0000005)”

这是ContextCapture团队目前正在调查嘚问题。它出现在安装了集成和NVIDIA显卡(通常是笔记本电脑)的系统上不幸的是,我们没有短期修复我们最好的建议是继续使用早期版夲的ContextCapture,例如Update 8(

向已空三计算的数据中再添加新照片需要更新结果还是需要整体重新计算一遍?

添加新照片时建议先单独进行空三计算,然后再跟原有结果合并

合并空三结果后通常建议重新跑一遍空三,否则容易出现裂缝或者融合不整齐的情况。

译者:三维GIS那点事

可鉯将照片网格与地形测量相结合以创建更精确的网格吗

是 - 建议您放置在照片中可见的目标。然后您可以拍摄有关这些目标的调查数据。要链接调查数据和照片请使用目标在照片和测量点之间创建搭配点。

对于控制点目前大部分做数据处理的群友都不陌生。单连接点鼡的人一般都不多除了小面积精细建模之外。因为工作量太大

对于空中无法覆盖的区域,如果要地面拍照要么增加过渡照片,要么使用大量的连接点

译者:三维GIS那点事

在组合框中设置空间参照系。“笛卡尔”系统可用于输入非地理参考控制点例如在本地空间参考系统中。对于地理参考控制点在输入表格中的坐标之前,请选择所需的空间参照系

2.单击添加点以在所选空间参照系中创建新控制点。

唍整:将使用XYZ坐标(默认)

水平:仅使用X和Y坐标。

检查点 - 如果要仅使用控制点进行检查请启用此选项。在这种情况下该控制点将不鼡于航空三角测量。

给定3D位置 - 在相应列中编辑给定3D位置的控制点坐标单位取决于所选的空间参照系。

笛卡尔:任意单位X,Y和Z的相同单位(对于地理参考控制点笛卡尔均表示)。

WGS 84:以度为单位的纬度和经度以米为单位的椭圆体高度。

其他:XY和以米为单位的高度。

水岼精度 - 输入控制点的X和Y坐标的给定精度具有更高精度的控制点将在航空三角测量中具有更大的权重。

垂直精度 - 输入控制点Z坐标的给定精喥具有更高精度的控制点将在航空三角测量中具有更大的权重。

4.添加图像测量 - 选择要添加测量的照片在照片中找到控制点位置,然后使用Shift +单击设置图像测量位置

翻译人:三维GIS那点事

连接点对应于两个或更多个不同的照片像素,其中这些像素代表场景中相同的物理点的投影ContextCapture可以在航空三角测量过程中自动生成大量自动连接点。用户连接点也可以从专用接口先验输入以帮助进行航空三角测量。

控制点昰在块的空三测量期间使用的可选定位数据将控制点添加到块可以精确地对其进行地理配准并避免长距离度量失真。

1.连接点是为了让照爿成果参与到空三为最终的网格结构更加完善。是人工辅助网格构建的过程

2.控制点是让最终的网格结构拥有正确的地理位置信息(比例信息)避免畸变。

通知是您可以在应用的常规 UI 外部姠用户显示的消息

当您告知系统发出通知时,它将先以图标的形式显示在通知区域

用户可以打开抽屉式通知栏查看通知的详细信息。 

通知区域和抽屉式通知栏均是由系统控制的区域用户可以随时查看。

图 1. 通知区域中的通知

图 2. 抽屉式通知栏中的通知。

注:除非特别紸明否则本指南均引用版本 4 中的 类。Android


作为 Android 用户界面的一个重要组成部分通知具有自己的设计指导方针。Android 5.0(API 级别 21)中引入的材料设计变哽尤为重要您应查阅培训资料了解详细信息。 要了解如何设计通知及其交互请阅读设计指南。


您可以在  对象中为通知指定 UI 信息和操作要创建通知,请调用它将返回包含您的具体规范的  对象。要发出通知请通过调用  将  对象传递给系统。

 对象必须包含以下内容:

所有其他通知设置和内容都是可选的如需了解有关它们的更多详情,请参阅  参考文档

尽管通知操作都是可选的,但是您至少应向通知添加┅个操作 操作允许用户直接从通知转到应用中的 ,他们可在其中查看一个或多个事件或执行进一步的操作

一个通知可以提供多个操作。您应该始终定义一个当用户点击通知时会触发的操作;通常此操作会在应用中打开。 您也可以向通知添加按钮来执行其他操作例如,暂停闹铃或立即答复短信;此功能自 Android 4.1 起可用如果使用其他操作按钮,则您还必须使这些按钮的功能在应用的  中可用;请参阅部分以叻解更多详情。

在用户点击通知时启动  是最常见的操作场景此外,您还可以在用户清除通知时启动 在 Android 4.1 及更高版本中,您可以通过操作按钮启动 如需了解更多信息,请阅读参考指南的 部分

您可以根据需要设置通知的优先级。优先级充当一个提示提醒设备 UI 应该如何显礻通知。 要设置通知的优先级请调用  并传入一个  优先级常量。有五个优先级别范围从  (-2) 到  (2);如果未设置,则优先级默认为  (0)

有关设置适當优先级别的信息,请参阅设计指南中的“正确设置和管理通知优先级”

以下代码段说明了一个指定某项 Activity 在用户点击通知时打开的简单通知。 请注意该代码将创建 对象并使用它来为操作创建 。部分对此模式做了更详尽的阐述:

/*这里说下PendingIntent与Intent区别 intent英文意思是意图pending表示即将發生或来临的事情。 
PendingIntent这个类用于处理即将发生的事情比如在通知Notification中用于跳转页面,但不是马上跳转
使得外部App可以如同当前App一样的执行pendingintent裏的 Intent, 就算在执行时当前App已经不存在了

就这么简单。您的用户现已收到通知

要使通知出现在展开视图中,请先创建一个带有所需普通視图选项的  对象接下来,调用以扩展布局对象作为其参数的 

请记住,扩展通知在 Android 4.1 之前的平台上不可用要了解如何处理针对 Android 4.1 及更早版夲平台的通知,请阅读部分

例如,以下代码段演示了如何更改在前面的代码段中创建的通知以便使用扩展布局:

 

 
并非所有通知功能都鈳用于某特定版本,即便用于设置这些功能的方法位于支持库类 中也是如此 例如,依赖于扩展通知的操作按钮仅会显示在 Android 4.1 及更高版本的系统中这是因为扩展通知本身仅在 Android 4.1 及更高版本的系统中可用。
为了确保最佳兼容性请使用 及其子类(特别是 )创建通知。此外在实現通知时,请遵循以下流程:
  1. 为所有用户提供通知的全部功能无论他们使用何种版本的 Android 系统。 为此请验证是否可从应用的 中获得所有功能。要执行此操作您可能需要添加新的 。

    例如若要使用  提供停止和启动媒体播放的控件,请先在应用的  中实现此控件

  2. 确保所有用戶均可通过点击通知启动  来获得该Activity中的功能。
  3. 现在将要使用的扩展通知功能添加到通知。请记住您添加的任何功能还必须在用户点击通知时启动的 中可用。
 

 

 
当您需要为同一类型的事件多次发出同一通知时应避免创建全新的通知, 而是应考虑通过更改之前通知的某些值囷/或为其添加某些值来更新通知
例如,Gmail 通过增加未读消息计数并将每封电子邮件的摘要添加到通知通知用户收到了新的电子邮件。 这稱为“堆叠”通知;设计指南对此进行了更详尽的描述
注:此 Gmail 功能需要“收件箱”扩展布局,该布局是自 Android 4.1 版本起可用的扩展通知功能的┅部分
下文介绍如何更新和删除通知。

 
要将通知设置为能够更新请通过调用 发出带有通知 ID 的通知。 要在发出之后更新此通知请更新戓创建 对象,从该对象构建 对象并发出与之前所用 ID 相同的 。如果之前的通知仍然可见则系统会根据 对象的内容更新该通知。相反如果之前的通知已被清除,系统则会创建一个新通知
以下代码段演示了经过更新以反映所发生事件数量的通知。 它将通知堆叠并显示摘要:

 
除非发生以下情况之一否则通知仍然可见:
  • 用户单独或通过使用“全部清除”清除了该通知(如果通知可以清除)。
  • 用户点击通知苴您在创建通知时调用了 。
  • 您针对特定的通知 ID 调用了 此方法还会删除当前通知。
  • 您调用了  方法该方法将删除之前发出的所有通知。
 

 

 
从通知中启动 时您必须保留用户的预期导航体验。 点击“返回”应该使用户将应用的正常工作流回退到主屏幕而点击“最新动态”则应將 显示为单独的任务。 要保留导航体验您应该在全新任务中启动。如何设置 以获得全新任务取决于正在启动的 的性质一般有两种情况:
您要启动的   是应用的正常工作流的一部分。在这种情况下请设置   以启动全新任务并为  提供返回栈,这将重现应用的正常“返回”行为

Gmail 应用中的通知演示了这一点。点击一封电子邮件消息的通知时您将看到消息具体内容。 触摸返回将使您从 Gmail 回退到主屏幕就好像您是從主屏幕(而不是通知)进入 Gmail 一样。

无论您触摸通知时处于哪个应用都会发生这种情况。 例如如果您在 Gmail 中撰写消息时点击了一封电子郵件的通知,则会立即转到该电子邮件 触摸“返回”会依次转到收件箱和主屏幕,而不是转到您在撰写的邮件

仅当从通知中启动时,鼡户才会看到此  从某种意义上说,  是通过提供很难显示在通知本身中的信息来扩展通知对于这种情况,请将   设置为在全新任务中启动但是,由于启动的  不是应用 Activity 流程的一部分因此无需创建返回栈。点击“返回”仍会将用户带到主屏幕
 

 
要设置可启动直接进入 的 ,请執行以下步骤:
  1. 在清单文件中定义应用的  层次结构
 
最终的 XML 应如下所示:
  1. 通过调用  将返回栈添加到堆栈生成器。 对于在清单文件中所定义層次结构内的每个返回栈均包含可启动  的  对象。此方法还会添加一些可在全新任务中启动堆栈的标志

    注:尽管  的参数是对已启动  的引鼡,但是方法调用不会添加可启动 的 而是留待下一步进行处理。

  2. 如需请通过调用  向堆栈中的  对象添加参数。有时需要确保目标  在用戶使用“返回”导航回它时会显示有意义的数据。
 
 
 
以下代码段演示了该流程:

 

特殊 无需返回栈因此您不必在清单文件中定义其 层次结构,也不必调用 来构建返回栈取而代之的是,您可使用清单文件设置 任务选项并通过调用 创建:
    与您在代码中设置的   标志相结合,这可確保此   不会进入应用的默认任务任何具有应用默认关联的现有任务均不受影响。
    将新任务从“最新动态”中排除这样用户就不会在无意中导航回它。

    以下代码段显示了该元素:

    1. 为  设置所需的任何其他选项

    以下代码段演示了该流程:

 

 

 
通知可能包括动画形式的进度指示器,向用户显示正在进行的操作状态 如果您可以估计操作所需的时间以及任意时刻的完成进度,则使用“限定”形式的指示器(进度栏) 如果无法估计操作的时长,则使用“非限定”形式的指示器(Activity 指示器)
平台的 类实现中显示有进度指示器。
要在 Android 4.0 及更高版本的平台上使用进度指示器需调用 。对于早期版本您必须创建包括 视图的自定义通知布局。
下文介绍如何使用 在通知中显示进度

显示持续时间凅定的进度指示器

 

您可以在操作完成后仍保留显示进度栏,也可以将其删除无论哪种情况,都请记住更新通知文本以显示操作已完成 偠删除进度栏,请调用 例如:

 
要显示非限定形式的 Activity 指示器,请使用 将其添加到通知(忽略前两个参数)然后发出通知。这样一来指礻器的样式就与进度栏相同,只是其动画还在继续
在操作开始之际发出通知。除非您修改通知否则动画将一直运行。 操作完成后调鼡 ,然后更新通知以删除 Activity 指示器 请务必这样做;否则,即使操作完成动画仍将运行。同时请记得更改通知文本,以表明操作已完成
要了解 Activity 指示器的工作方式,请参阅上述代码段找到以下几行:
将找到的这几行替换为以下几行:

 
通知可根据您使用以下 方法分配的元數据进行排序:
  • 当设备处于“优先”模式时, 会告知系统如何处理应用通知(例如通知代表传入呼叫、即时消息还是闹铃)。
  •  允许您向通知添加人员名单您的应用可以使用此名单指示系统将指定人员发出的通知归成一组,或者将这些人员发出的通知视为更重要的通知
 
 
 

 
對于 Android 5.0(API 级别 21),当设备处于活动状态时(即设备未锁定且其屏幕已打开),通知可以显示在小型浮动窗口中(也称为“浮动通知”) 這些通知看上去类似于精简版的通知??,只是浮动通知还显示操作按钮 用户可以在不离开当前应用的情况下处理或清除浮动通知。
可能触发浮动通知的条件示例包括:
  • 用户的 Activity 处于全屏模式中(应用使用 )或者
  • 通知具有较高的优先级并使用铃声或振动
 

 

 
随着 Android 5.0(API 级别 21)的发咘,通知现在还可显示在锁定屏幕上您的应用可以使用此功能提供媒体播放控件以及其他常用操作。 用户可以通过“设置”选择是否将通知显示在锁定屏幕上并且您可以指定您应用中的通知在锁定屏幕上是否可见。

 
您的应用可以控制在安全锁定屏幕上显示的通知中可见嘚详细级别 调用 并指定以下值之一:
  •  显示通知的完整内容。
  •  不会在锁定屏幕上显示此通知的任何部分
  •  显示通知图标和内容标题等基本信息,但是隐藏通知的完整内容
 
设置 后,您还可以提供其中隐藏了某些详细信息的替换版本通知内容例如,短信 应用可能会显示一条通知指出“您有 3 条新短信”,但是隐藏了短信内容和发件人要提供此替换版本的通知,请先使用 创建替换通知创建专用通知对象时,请通过 方法为其附加替换通知

在锁定屏幕上控制媒体播放

 
在 Android 5.0(API 级别 21)中,锁定屏幕不再基于 (现已弃用)显示媒体控件取而代之的昰,将 模板与 方法结合使用后者可将操作转换为可点击的图标。
注:该模板和 方法未包含在支持库中因此这些功能只能在 Android 5.0 及更高版本嘚系统上运行。
要在 Android 5.0 系统的锁定屏幕上显示媒体播放控件请将可见性设置为 ,如上文所述然后,添加操作并设置 模板如以下示例代碼中所述:
 
注:弃用 会对控制媒体产生进一步的影响。如需了解有关用于管理媒体会话和控制播放的新 API 的详细信息请参阅。

 

 
您可以利用通知框架定义自定义通知布局由该布局定义通知在 对象中的外观。 自定义布局通知类似于常规通知但是它们是基于 XML 布局文件中所定义嘚 。
自定义通知布局的可用高度取决于通知视图普通视图布局限制为 64 dp,扩展视图布局限制为 256 dp
要定义自定义通知布局,请首先实例化 对潒来扩充 XML 布局文件然后,调用 而不是调用 等方法。要在自定义通知中设置内容详细信息请使用 中的方法设置视图子项的值:
  1. 在单独嘚文件中为通知创建 XML 布局。您可以根据需要使用任何文件名但必须使用扩展名 .xml
 
此外 类中还有一些方法可供您轻松将 或 添加到通知布局。如需了解有关为通知创建自定义布局的详细信息请参阅 参考文档。
注意:使用自定义通知布局时要特别注意确保自定义布局适用於不同的设备方向和分辨率。 尽管这条建议适用于所有“视图”布局但对通知尤为重要,因为抽屉式通知栏中的空间非常有限 不要让洎定义布局过于复杂,同时确保在各种配置中对其进行测试

对自定义通知文本使用样式资源

 
始终对自定义通知的文本使用样式资源。通知的背景颜色可能因设备和系统版本的不同而异使用样式资源有助于您充分考虑到这一点。 从 Android 2.3 开始系统定义了标准通知布局文本的样式。若要在面向 Android 2.3 或更高版本系统的多个应用中使用相同样式则应确保文本在显示背景上可见。

我要回帖

 

随机推荐