在安卓系统开发中,性能监控是一项至关重要的工作。随着移动设备的普及和使用频率增加,用户对应用程序的性能要求也越来越高。一款高性能的安卓应用可以提升用户体验,增加用户黏性,同时也能帮助开发者提升应用的竞争力。为了确保应用在不同设备上能够稳定运行,开发者需要不断关注和监控应用的性能表现。
性能监控可以帮助开发者及时发现应用程序存在的性能问题,并对其进行优化。通过监控应用的CPU占用率、内存占用、网络请求耗时、界面渲染速度等关键指标,开发者可以快速定位到性能瓶颈所在,从而有针对性地进行优化。优化后的应用不仅可以提升运行速度和响应速度,还可以减少耗电量,提升设备的稳定性和用户体验。
性能监控可以帮助开发者评估应用在不同环境下的性能表现。在不同型号、不同版本的安卓设备上,应用的性能表现会有所不同。通过性能监控,开发者可以了解应用在各种设备上的性能差异,及时调整优化策略,确保应用在不同环境下都能够流畅运行。
性能监控还可以帮助开发者及时发现并解决潜在的内存泄漏问题。在安卓应用开发过程中,内存泄漏是一个常见的问题,如果不及时发现和处理,会导致应用运行速度变慢,甚至引起应用崩溃。通过监控应用的内存占用情况,开发者可以追踪到内存泄漏的源头,并采取措施及时处理,确保应用的稳定性和可靠性。
性能监控还可以为开发者提供数据支持,帮助他们做出更明智的决策。通过性能监控工具收集的数据可以帮助开发者了解用户行为和应用使用情况,为产品迭代和优化提供有效参考。开发者可以根据数据分析结果,调整应用功能和界面设计,满足用户需求,提升用户满意度。
了解安卓系统开发中的性能监控重要性是非常必要的。通过性能监控,开发者可以及时发现和解决应用存在的性能问题,提升应用的稳定性和用户体验。只有不断关注和监控应用的性能表现,才能保证应用在竞争激烈的市场中立于不败之地。
鸿蒙和安卓有什么区别(性能、生态、应用兼容性对比)
随着科技的不断发展,智能手机已经成为人们日常生活中必不可少的物品。而在智能手机市场中,安卓系统一直是占据主导地位的操作系统。但是,华为在2019年推出了自己的操作系统——鸿蒙。那么,鸿蒙和安卓有什么区别呢?本文将从性能、生态、应用兼容性三个方面进行对比。
一、性能方面的对比
1.1启动速度
启动速度是衡量手机性能的一个重要指标。鸿蒙系统采用了分布式架构,可以在不同的设备上快速启动,而安卓系统则需要在每个设备上单独进行优化,启动速度相对较慢。
1.2系统响应速度
系统响应速度也是衡量手机性能的重要指标之一。鸿蒙系统采用了分布式架构,可以将不同的任务分配给不同的设备进行处理,从而提高系统响应速度。而安卓系统则需要在每个设备上单独进行优化,响应速度相对较慢。
1.3能耗方面
鸿蒙系统采用了分布式架构,可以将不同的任务分配给不同的设备进行处理,从而降低设备的能耗。而安卓系统则需要在每个设备上单独进行优化,能耗相对较高。
二、生态方面的对比
2.1应用数量
安卓系统已经建立了完善的应用生态系统,应用数量也非常丰富。而鸿蒙系统目前还处于起步阶段,应用数量相对较少。
2.2应用质量
安卓系统中的应用质量参差不齐,有些应用存在安全隐患,而鸿蒙系统则可以在应用开发阶段进行安全检测,保证应用的质量。
2.3应用更新
安卓系统中的应用更新需要通过应用商店进行下载,而鸿蒙系统则可以通过系统更新进行应用更新,更新速度更快。
三、应用兼容性方面的对比
3.1安卓应用兼容性
安卓应用在鸿蒙系统上无法直接运行,需要通过虚拟机进行模拟运行,会影响应用的性能。
3.2鸿蒙应用兼容性
鸿蒙应用在安卓系统上无法直接运行,需要进行重新编译,会增加开发者的工作量。
手机性能,是什么意思
手机性能是指一部手机终端的综合使用能力,性能包含了价格、硬件、兼容性、系统、寿命、材料等多方面来综合了解,才能得出可信度较高的性能综合数据值。
性能评判标准如下:1、性价比。
在同等价格的条件下,硬件配制越高、硬件寿命越久、品牌越卓越;同样,若一样的配制,则价格越低,性价比越高。
比如,同品牌同类型的CPU,双核的使用性能比单核好。
2、兼容性。
并不是所有的硬件参数越高就越好,使用时还需要考虑系统兼容情况。
比如和系统的兼容、各个硬件的磨合程度,以及使用时是否有死机、卡顿、掉线等问题。
兼容性不仅是硬件的要求,同时对于软件也是严格的要求。
3、材料。
手机材料的使用也很重要,对于当前各类终端类型,如陶瓷、金属、塑料等外壳或内部材料都会影响到散热、安全(如电池的短路引起自燃)。
考虑手机性能也不能忽略这一项。
4、系统。
目前主流系统为IOS和安卓。
IOS系统相对是封闭,但是安全性相对更高。
因为安卓是开源系统,ROM包可以随意被更改或者删除,同时病毒的侵占性也很高。
使用时不要随意安装陌生软件,否则不仅会被私自运行不程序产生电量消耗,还会影响信息财产安全(如个人信息被盗用)。
所以,手机性能就是一个手机的综合评分,不是单方面分数高就说明手机好,需要根据多方面和使用的实际情况来评定。
开发者选项中的这项,究竟代表什么意思
安卓手机都有一个开发者选项,为手机的工程调试设置项。
一般用USB连接电脑管理手机时,需要把开发者选项里的【USB调试开关打开】。
开发者选项基本功能:
1.调试模式
USB调试是安卓系统对外部程序开放权限,外部程序如果要接管或者参与系统控制,就必须要把USB调试模式给打开,否则外部程序无法实现功能。
2.桌面备份密码
“桌面备份密码”是开发者选项中的第一个设置项,从4.0开始,开发者就可以通过最新的SDK(软件开发工具包)来备份手机系统,这个选项的功能就是事先设置一个备份密码,当开发者通过SDK备份手机系统时,需要先输入已经设置好的密码才可以备份,最大程度保证系统安全。
3.监控选项
监控cpu和GPU使用情况,为了让开发者观察应用对资源的占用情况。
4.强制GPU渲染
开启强制GPU渲染无疑会提高系统的流畅度,但是安卓系统并不能自动调节GPU渲染的开关,只能手动设置,所以开启GPU渲染也同样会加重cpu负担,使的手机耗电量和发热量增加。
5.窗口动画比例,过度动画比例,桌面阴影效果
这些选项都是让系统桌面滑动时候增加一些特效,当然也会拖慢系统流畅度,可以根据自己喜好选择。
6.应用程序
安卓系统的后台程序被分为两类,一类是qq、微博等“高权限”的应用,这些应用在后台依然会保留原本的服务和权限,并且常驻内存;还有一些游戏程序等“低权限”的应用,只是将一些缓存放在ram中,方便我们切换和载入。通过在“应用程序”分类中设置“不保留活动”,来节省一些内存,当然并不影响“高权限”程序的后台运行。
也可以使用“限制后台进程”来手动控制后台程序,节省资源空间。当然,一般用户还是用默认设置吧。
7.更换内核
内核包含了硬件信息和底层驱动,好的内核可以让系统发挥更好的性能并且更加稳定,而且在降低功耗方便也是不错的,内核是可以直接recovery刷入的,不失为一个好方法。
安卓上什么软件可以实时查看cpu和运行内存使用情况?
安卓上有很多可以实时查看 CPU 和内存使用情况的应用程序。以下是几个比较常用的:
它的安卓系统版本是什么
它的安卓系统版本是什么?它的安卓系统版本是什么?——了解手机系统版本的重要性手机现在已经成为我们日常生活的重要组成部分,而手机系统是让手机运行起来的核心,其中安卓系统成为市场上最流行的操作系统之一。
然而,在使用手机时,有一个重要的问题就是:它的安卓系统版本是什么?首先,安卓系统的版本不同,功能、性能、安全性也会有所不同。
举个例子,某些最新功能可能只能在较高版本的安卓系统上使用,而低版本的系统可能会存在一些漏洞和安全隐患。
因此,了解自己手机的安卓系统版本以及是否需要升级,可以帮助我们更好地使用手机并保障个人数据的安全。
其次,对于开发者和用户来说,了解安卓系统版本也非常重要。
开发者可以根据不同代码库和API级别优化应用程序的功能和性能,并确保兼容性。
用户则可以根据安卓系统版本下载并安装合适的应用程序,以防止出现不兼容或运行缓慢等问题。
那么,如何查看自己手机的安卓系统版本呢?在大多数安卓手机上,可以通过以下步骤进行查看:1.打开手机设置2.找到“关于手机”或“设备信息”选项3.查找“安卓版本”或“固件版本”在某些特定的安卓手机上,如小米、华为、OPPO等,可以通过以上步骤查看安卓版本。
如果你无法找到,不妨尝试在手机上搜索“安卓版本”或者在大家社区询问其他用户。
总之,了解自己手机的安卓系统版本是非常重要的。
从手机的功能、性能、安全性等方面来看,安卓系统版本都起着很大的作用。
因此,在使用手机时,了解自己手机的安卓系统版本以及是否需要升级,可以帮助我们更好地使用手机并保证个人数据的安全。
Android P 系统稳定性问题分析方法总结
Android系统最开始是为手机设计的,在机顶盒,电视,带屏音箱等大屏上运行后,芯片厂家做些适配,产品厂家也会做系统客制化,有时候还要适配第三方应用..等待 这种适配容易引人系统的稳定性问题,系统稳定性对于用户体验至关重要,很多问题也都比较类似,android系统对系统性能,稳定性分析工具也比较多,下面根据工作中遇到的问题做个总结。
从表现来看有: 死机重启, 自动关机, 无法开机,冻屏,黑屏以及闪退, 无响应等情况;
ANR(Application Not responding),是指普通app进程超过一定时间没有执行完,系统会弹出应用无响应对话框. 如果 该进程运行在system进程, 更准确的来说,应该是(System Not Responding, SNR)
ANR产生的原因可能是各种各样的,但常见的原因可以分为:
日志 文件(保存在/data/anr/) 从logcat里可以看到死锁的打印 从可以看到线程的函数调用栈
10-16 00:50:10 820 907 E ActivityManager: ANR in , time= 10-16 00:50:10 820 907 E ActivityManager: Reason: Broadcast of Intent { act=_TICK flg=0x (has extras) } 10-16 00:50:10 820 907 E ActivityManager: Load: 30.4 / 22.34 / 19.94 10-16 00:50:10 820 907 E ActivityManager: Android time :[2015-10-16 00:50:05.76] [,266] 10-16 00:50:10 820 907 E ActivityManager: CPU usage from 6753ms to -4ms ago: 10-16 00:50:10 820 907 E ActivityManager: 47% 320/netd: 3.1% user + 44% kernel / faults: minor 3 major 10-16 00:50:10 820 907 E ActivityManager: 15% /: 2.8% user + 12% kernel / faults: 1144 minor 10-16 00:50:10 820 907 E ActivityManager: 13% /hif_thread: 0% user + 13% kernel 10-16 00:50:10 820 907 E ActivityManager: 11% 175/mmcqd/0: 0% user + 11% kernel 10-16 00:50:10 820 907 E ActivityManager: 5.1% /app_process: 1.6% user + 3.5% kernel / faults: 9703 minor 540 major 10-16 00:50:10 820 907 E ActivityManager: 3.3% /: 2.6% user + 0.7% kernel / faults: 8402 minor 343 major …… 10-16 00:50:10 820 907 E ActivityManager:+0% /cat: 0% user + 0% kernel 10-16 00:50:10 820 907 E ActivityManager:+0% /zygote64: 0% user + 0% kernel 10-16 00:50:10 820 907 E ActivityManager: 87% TOTAL: 3% user + 18% kernel + 64% iowait + 0.5% softirq
发生ANR的时间 00:50:10 ,可以从这个时间点之前的日志中,还原ANR出现时系统的运行状态 发生ANR的进程 发生ANR的原因 Reason关键字表明了ANR的原因是处理TIME_TICK广播消息超时 CPU负载Load关键字表明了最近1分钟、5分钟、15分钟内的CPU负载分别是30.4、22.3、最近1分钟的负载最具参考价值,因为ANR的超时限制基本都是1分钟以内, 这可以近似的理解为CPU最近1分钟平均有30.4个任务要处理,这个负载值是比较高的 CPU使用统计时间段 CPU usage from XX to XX ago关键字表明了这是在ANR发生之前一段时间内的CPU统计,类似的还有CPU usage from XX to XX after关键字,表明是ANR发生之后一段时间内的CPU统计 各进程的CPU使用率 以进程的CPU使用率为例,它包含以下信息: 总的CPU使用率: 3.3%,其中systemui进程在用户态的CPU使用率是2.6%,在内核态的使用率是0.7% 缺页次数fault:8402 minor表示高速缓存中的缺页次数,343 major表示内存的缺页次数。minor可以理解为进程在做内存访问,major可以理解为进程在做IO操作。 当前minor和major值都是比较高的,从侧面反映了发生ANR之前,systemui进程有有较多的内存访问操作,引发的IO次数也会较多 CPU使用汇总TOTAL关键字表明了CPU使用的汇总,87%是总的CPU使用率,其中有一项iowait表明CPU在等待IO的时间,占到64%,说明发生ANR以前,有大量的IO操作。app_process、 system_server, 这几个进程的major值都比较大,说明这些进程的IO操作较为频繁,从而拉升了整个iowait的时间
如下 —– pid at 2015-10-16 00:48:29 —– Cmd line: DALVIK THREADS (54): main prio=5 tid=1 Blocked | group=main sCount=1 dsCount=0 obj=0x75bd5818 self=0x7f8549a000 | sysTid= nice=0 cgrp=bg_non_interactive sched=0/0 handle=0x7f894bbe58 | state=S schedstat=( ) utm= stm=8309 core=0 HZ=100 | stack=0x7fdffda000-0x7fdffdc000 stackSize=8MB | held mutexes= at (SourceFile:77)
Android系统中,有硬件WatchDog用于定时检测关键硬件是否正常工作,类似地,在framework层有一个软件WatchDog用于定期检测关键系统服务是否发生死锁事件。 watchdog 每过30s 检测一次, 如果要监控的线程30s 后没有响应,系统会dump出此进程堆栈,如果超过60s 没有相应,会触发watchdog,并重启系统 10:57:23.718 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor on foreground thread (), Blocked in handler on main thread (main), Blocked in handler on ActivityManager (ActivityManager) 10:57:23.725 W Watchdog: annotated stack trace: 10:57:23.726 W Watchdog: at () 10:57:23.727 W Watchdog: – waiting to lock <0x0bb47e39> (a ) 10:57:23.727 W Watchdog: at (:4151) 10:57:23.733 W Watchdog: – waiting to lock <0x00aaee38> (a ) …… 10:57:23.736 W Watchdog: at (:838) 10:57:23.739 W Watchdog: ActivityManager annotated stack trace: 10:57:23.740 W Watchdog: at $(:405) 10:57:23.740 W Watchdog: – waiting to lock <0x0bb47e39> (a ) 10:57:23.740 W Watchdog: at (:106) 10:57:23.741 W Watchdog: *** GOODBYE! 分析: 提示 ActivityManagerService的,main,ActivityManager 线程Block了,但logcat里只能看到 等待0x0bb47e39 锁,main 等待0x00aaee38锁,ActivityManager等待0x0bb47e39锁,无法进一步分析,需要看 Cmd line: system_server …… main prio=5 tid=1 Blocked
当出现应用闪退,可以从两个方面查看: 1、是否应用崩溃: 可以通过logcat –s AndroidRuntime DEBUG过滤日志,查看应用奔溃的具体堆栈信息。 其中AndroidRuntime的TAG打印java层信息,DEBUG的TAG打印native层的信息。 2、是否被lowmemorykiller杀掉: 可以通过 logcat –s lowmemorykiller 过滤日志,注意adj 0是代表前台进程。例如: 03-08 04:16:58.084 310 310 I lowmemorykiller: (2520), uid , adj 0 发生这种情况,需要dumpsys meminfo 查看当前内存状态,是否有进程内存泄漏,导致系统内存不够,出现前台进程被杀,造成闪退。
测试过程中,经常遇到屏幕闪烁的现象,需要排除是OSD层闪烁,还是video层闪烁。 1、先通过android原生方法:screencap截图, screenrecord 录制视频,这里都是截取的OSD层,查看是否有闪屏现象。 2、OSD没有问题,就需要从更底层的显示模块分析,一般需要芯片厂家提供debug手段,不同芯片厂家方案不一样。 3, 有时候输出不稳定,hdmi/mipi信号干扰,输出频率异常等也会导致闪屏,这种情况需要硬件协助分析。 如果OSD层也闪烁,则需从系统和应用层面分析。如曾遇到在开机向导界面,有个应用不断被唤起,导致走开机向导时出现连续闪灰屏的现象。
黑屏分UI黑屏,视频播放黑屏但UI正常等,2种场景
1、screencap截屏,排查OSD层图形是否正常, 2、如果OSD图形正常,需要排查显示输出模块是否异常。 3、电视机里面屏显是单独控制,如果屏参配置错误会导致整改黑屏。 OSD异常,需要排查顶层activity是否黑屏,window是否有异常等.
1,排查视频图层或者window是否创建成功。 2,排查解码是否有异常,不同的应用youtube,netflix,iptv解码方式不一样,需要具体问题具体分析。
如下,ActivityManager因为空对象引用而挂掉,导致system_server重启 *** [FATAL EXCEPTION IN SYSTEM PROCESS: ActivityHanager [ ^: Attempt to invoke virtual method void co®(boolean) on a null object reference at () at () at -o-batteryStatslMpl$Constants-onChange(BatteryStatsInpl-java) at (:145) 解决方法:修复空指针
DEBUG : pid: 296, tid: 1721, name: Binder:296_4 >>> /system/bin/surfaceflinger <<< DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr —— DEBUG : Abort message: :149] Failed HIDL return status not checked: Status(EXTRANSACTIONFAILED): DEBUG : r0 rl b9 DEBUG : C4 r5 b9 r2 r3 a5c5d620 r6 a235d60c r7 c DEAD_OB3ECT: DEBUG : r8 r9 d DEBUG : ip a6ablbec sp a235d5f8 rlO a568f090 rll a620dce9 Ir a5be901d pc a5be0da2 /system/lib/ (abort+62) /system/lib/ (android::base::DefaultAborter(char const
)+6) backtrace: /system/lib/ /system/lib/ /system/lib/ /system/lib/ /system/lib/ (android::base::LogMessage::~LogMessage()+502) /system/lib/ (android::hardware::details::return_status::~return_status()+184) (android::Hwc2::impl::Composer::getActiveConfig(unsigned long long, unsigned int
)+56) (HWC2::Display::getActiveConfig(std::_1::shared_ptr<HWC2::Display::Config const>*) const+38) (android::HWComposer::getActiveConfig(int) const+64) (android::SurfaceFlinger::resyncToHardwareVsync(bool)+64) 可以根据backtrace来进行定位异常崩溃的地方。Android P上, backtrace使用Java上下文来显示,省去使用addr2line来转换的一个过程,方便调试分析问题。但是实际场景中, 有些native进程崩溃只有pc地址,而无函数信息,或者需要定位到具体的某个文件某个函数,则可借助堆栈分析工具addr2line。 addr2line:根据堆栈定位具体函数和文件 addr2line -e -f a09 addr2line-e -f a09 _ZN7android14SurfaceFlinger12waitForEventEv frameworks/native/services/surfaceflinger/:1229 需注意两点: 1、需用带debug信息的LINK目录里面的so库,机顶盒上的so库是无法定位的: out/target/product/xx/obj/SHARED_LIBRARIES/libsurfaceflinger_intermediates/LINKED/ 或者:out/target/product/xx/symbols/system/lib/ 2、定位的文件,必现和机器上出现问题的版本一致,否则定位不准确 debuggerd:打印当前进程实时堆栈:debuggerd –b pid
主要可以分为以下3类 1)Data abort Unable to handle kernel NULL pointer dereference at virtual address… Unable to handle kernel paging request at virtual address… Unhandled … Unhandled prefetch … 2)BUG/BUG_ON Oops – BUG… 例如: Out of memory and no killable processes… rbus timeout… … PS:WARN_ON只dump stacks,kernel还是正常 3)bad mode Oops – bad mode… 日志打印: 〃错误类型原因 [214.] 08:14:19.315 (2)-0488 Unable to handle kernel paging request at virtual address 6b6b6cl7 [214.] 08:14:19.326 (2)-0488addr:6b6b6c17 pgd = d [214.] [6b6b6c17J •pgd=O000eO0e 〃Oopsttl误码序号 [214.] 08:14:19.336 (2)-0488 Internal error: Oops: 805 [#1] PREEMPT SMP ARM [214.9914S3] Modules linked in: 8192eu ufsd(PO) jnl(O) fusion(O) 〃发生也错误的CPU序号 (215.]08:14:19.354(2)-0488CPU: 2 PID: 488 Comm: system_server Tainted: P 4.4.3+ #113 (2)-0488Hardware name: rtd284x [215.]08:14:19.364 〃当前PC指针 98:14:19.377(2)-0488PC is at mutex_unlo<k+0xc/0x38 (21S.]08:14:19.383(2)-0488LR is at storage_pm_event+0xb4/0xe8 (21S.] //Registers 08:14:19.390 (2)-0488 :[<ceb78ffc>] Ir : [<C>] psr: 200f0013 I 215.] sp : ccf79e38 ip : eceoeeee fp : 9bc I 215.] 08:14:19.404 (2)-0488 rlO: r9 :Cl8b3864 r8 : oeeeeeoe 215.] 215.]08:14:19.411 (2)-0488 P7 : C1293a98 P6 :C r5 : C r4 :C1293a80 21S.] [ 215.] 08:14:19.420 (2)-0488 r3 : r2 ri : 000^000 re :6b6b6c07 [ 215.] 08:14:19.428 (2)-0488 Flags: nzCv IRQs on FIQs on Mode SVC 32 ISA ARM Segment user 08:14:19.438 (2)-0488 Control: 10c5383dTable: a DAC: //Process.不 ,定是该process的错误,只是发生错误时,刚好在运行该process [215.] //Stacks08:14:19.446 (2)-0488 Process syste«i_server (pid: 488, stack limit = 0xccf)
(21S.]08:14:19.454 (2)-0488 Stack: 0xccf79e38 (Oxccf79d7。 to 0xccf7a08Q) – par(0xcf796d4)
—[ end trace 45did6a0974 ]—Kernel panic not syncing: Fatal exception [217.] 08:14:21.712 (0)-0488 解决方案: kernel异常一般找芯片原厂协助分析。
系统卡顿时,一般先分三步走: 1、查看当前系统的CPU,IO等参数,输入top、iotop命令: (如:iotop -s io -m 9) 如果有异常飙高的进程,kill掉后会发现系统恢复正常。 之前项目上遇到过某些U盘IO性能比较差,媒体中心又在后台扫描媒体问题,导致系统各种卡顿,io wait时间比较长。 2、系统进程卡住,触发Watchdog:ps –A |grep system_server,一般而言,system_server正常的进程号是200多,如果发现进程号变成几千,则可能出现重启,结合tombstone和 /data/anr下的trace文件分析重启原因 3、当前应用出现卡顿,造成ANR。输入logcat | grep ANR,如果有ANR打印,再去/data/anr下面查看相应进程的traces文件 有时在应用里面操作卡顿,按键响应延迟,但是却没有生成ANR,此时如果退出该应用(如果无法退出,在抓取足够信息的情况下,可以串口直接kill掉卡顿的应用),则一切正常,可能是应用自身实现问题,或者调用了其它接口导致(例如曾遇到应用调用了中间件、mediaplayer某些接口导致操作严重卡顿,按键响应延迟),这种情况则需应用和相应接口的实现者去排查。
系统完全卡死,一般分三种情况 1,串口无响应,大概率kernel panic, 2,串口日志狂输出,把系统堵塞, 优化日志输出,关注关闭后压测。 3,Input系统完全堵塞,导致任何输入都无响应。
文章版权声明
1 原创文章作者:汇维网,如若转载,请注明出处: https://www.52hwl.com/109541.html
2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈
3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)
4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别