记一次Android概率性定屏问题分析解决路程

前言 

    最经一个同事遇到了概率性定屏的问题,询问我有没有解决过类似的问题,这不得让我想起了前同事解决概率行定屏问题留下来的宝贵文档,下面我就把前同事的文档关键的内容整理奉上,希望对概率性定屏问题有帮助。

 

一.问题描述

    客户的机器在交易过程中出现定屏,出现过如下三种现象:

    定屏1:按虚拟键有背景色,无法响应任何触摸事件,音量键无作用,power键有作用,ADB能连;

    定屏2:按虚拟键无背景色,power键有作用,ADB能连;

    定屏3:power键都无作用,ADB能连;

    根据描述可见,如上三个现象,严重程度递增;

 

二.原因分析

  • 1.复现并初步总结现场log,缩小可疑范围

    根据现场抓取到的logcat信息可以判断,客户的launcher应用经常性出现native crash,这说明客户launcher应用是有问题的;由表面现象显示,根据严重程度看有多种情况,不排除仅仅只是应用界面卡死,故需要加大测试力度,增加复现概率,抓取log,分类总结各根因;拿了多台机器跑monkey测试,忽略native crash:

       adb shell monkey -p com.ums.tss.mastercontrol  -s 500 --ignore-crashes --ignore-timeouts --ignore-native-crashes -v 500000000 &

    至少5台机器一起测试,基本一两天能复现出一台机器;

    其中一种情况,杀掉master应用可以恢复,通过am命令可以跳转到别的界面,进一步说明客户应用存在缺陷,由于不是系统问题,此问题不重点关注;但是,另外那种情况,应用不应该引起系统定住,出现这种现象只能拔电池,这个用户体验非常差,再说第三方应用也无法保证质量,crash几次也难免,所以这是个非常严重的问题,需要进一步查找系统缺陷的根因

    在monkey测试复现的机器上,做如下实验,进一步缩小问题范围:

    getevent 触摸事件有值,说明触摸上报无问题

    开发者选项中打开触摸调试,现象分为两种:触摸屏幕能出现背景圆球,以及不出现背景圆球

    通过adb shell,敲命令stop,start,只重启zygote而不重启kernel,问题消失;

    通过adb shell,执行/system/bin/bootanimation开机动画动作,虽然无法正常动画,但界面可变化

    执行 am start -n com.android.launcher/com.android.launcher2.Launcher

跳转,命令卡死,AMS等关键服务、InputReader、InputDispatcher都是 system_server 启动的核心子线程,重点关注system_server,需要进一步根据log判断情况

    从log看,system_server出现ANR,WindowManager: Input event dispatching timed out

    起初怀疑 从 InputReader到InputDispatcher再到响应显示链路出现问题,但从常规logcat中得不到任何线索,看来input timeout只是问题的结果和现象,而不是根因;

    怀疑system_server各子线程出现死锁,关注anr的关键log:traces.txt;搜索held by/ waiting/locked等关键字,现场log有限,并无明显死锁的异常;

    但其中一份 现场bugreport,引起了注意,system_server有明显死锁,ActivityManagerService的锁在执行 sendDeathNotice 时被拿住了,很多线程都在等它

    而其余情况下有些bugreport抓取log失效;log现象都是Input event dispatching timed out,monkey是否跟客户遇到的问题一致?还不得而知

   仍然需要自力更生,加大自测复现概率和抓取更多有用信息;而大量的看起来有点疑问实际却无效的log,扰乱了分析思路,遮蔽了真实根因

    由于复现时常常出现在输入法界面,怀疑第三方输入法调用系统api引起了一些兼容性问题,删掉输入法,确实概率变低,但是即使不是客户环境,monkey测试仍然出现过此问题,看来还需进一步分析

    由于情况复杂,总结搜集了如下一些重要log及调试手段,需要根据出现问题的时间点,仔细分析大量的log细节:

adb shell "ps | grep ' Z '" > 201706211748/ps_Z.txtadb shell "ps | grep ' t '" > 201706211748/ps_T1.txtadb shell "ps -t | grep ' D '" > 201706211748/ps_t_D.txtadb pull /sdcard/HiLogcat 201706211748/HiLogcatadb shell logcat -v threadtime -d *:v > 201706211748/logcat.txtadb shell logcat -b events -v threadtime -d *:v > 201706211748/logcat_events.txtadb shell dmesg > 201706211748/dmesg.txtadb pull /data/anr ./201706211748/anradb pull /data/tombstones ./201706211748/tombstonesadb pull /data/system/dropbox ./201706211748/dropboxadb shell ls -lsa /data/anr/" > ./201706211748/ll.txtadb shell ls -lsa /data/tombstones/ >> ./201706211748/ll.txtadb shell ls -lsa /data/system/dropbox/ >> ./201706211748/ll.txtadb shell "debuggerd -b 829" > ./201706211748/debuggerd_sysserv.txtadb shell "kill -3 829"adb pull /data/anr ./201706211748/anr2adb shell "echo t > /proc/sysrq-trigger"adb shell "cat /proc/kmsg" > ./201706211748/kmsg_trigger.txtadb shell dumpstate > ./201706211748/dumpstate.txtadb shell dumpsys > ./201706211748/dumpsys.txtadb pull /system/build.prop ./201706211748/build.propadb bugreport > ./201706211748/bugreport.txt

    其中 echo t > /proc/sysrq-trigger 能看到kernel的线程函数栈,针对死锁问题很有帮助;kill -3 pid可以得到关注应用空间调用栈,而debuggerd 也可以分析关注的进程栈

  • 2.定位到debuggerd机制出了问题

    分析monkey测试复现机器的log结果,重点关注分析 traces.txt、bugreport;而system_server、watchdog、ActivityManager等线程的锁的持有情况也是重点关注对象,出现了一些转机,发现 ActivityManagerService锁都被持有,执行am命令都无反应,只要执行am命令,再把traces.txt导出来,之前没有死锁的都会出现明显死锁;

    而通过其中的debuggerd -b pid调试手段去看函数调用栈时出现了最大的疑点,debuggerd 无反应!这时候怀疑android的debug机制有bug,于是想办法证明是否如此,总结规律,发现问题都是出现在native crash的时候,且NativeCrash线程出现异常NativeCrashListener: Exception dealing with report而ps | grep D发现,有一台机器debuggerd一直D状态,而有台机器debuggerd也一直睡眠,睡在connect连接上,直觉认为,要解决此问题,需要详细了解debuggerd调试机制,山路十八弯,终于要峰回路转了,实验也确实有方向了

    拿了两台出问题的机器,由于debuggerd只是调试使用,删掉system/bin/debuggerd进程,也不会影响正常行为,测试了三四天,都不再出现问题;只不过tombstone不再有了,影响debug crash,但这也不会影响实际出货的机器,这也不失为一种解决方案;

    那debuggerd到底哪里出现了问题呢?删掉debuggerd总觉得不那么完美,毕竟还得使用debug手段看一些现场,根因还得继续查找

    ps -t | grep " t "发现,客户应用,即“master”关键字的两个线程处于被调试状态,而出问题后,/data/tombstone/ 目录的内容不再变化,关注最后时间点的tombstone,它比前面正常的内容要少!最后时间节点的一份tombstone,master很多子线程tombstone信息都没得到输出;都是卡在最后一个t调试状态的master子线程上!

    这充分说明了,debug机制确实出现了问题,在输出native crash的dump内容时,系统卡死在一个进程调试状态了,那么就只能分析理顺一下debug的流程吧;

    先理一下框架层的crash机制:

    1、system_server启动AMS,AMS会创建一个子线程如“Thread-XX”,专门侦听crash,然后保存tombstone,让系统(AMS)做些善后处理,进而杀掉此进程的所有线程,调用流程是:

NativeCrashListener.run-->consumeNativeCrashData-->NativeCrashReporter-->handleApplicationCrashInner-->crashApplication-->killProcess

    2、“Thread-XX”是通过什么方式知道发生crash的呢?原来它创建了一个 "/data/system/ndebugsocket" sock,它做为服务端,accept等待侦听 debuggerd进程连接与消息;

    3、debuggerd是init进程启动的本地守护进程,它是“Thread-XX”的客户端,那它怎么知道发生了native crash呢?这个得从linux信号通信机制和android的调试机制说起,由于这里非常复杂,只简要说一下:android修改了boinic c/c++库函数的linker,在加载so的过程中,即设置了进程的android信号处理函数,拦截了SIGSEGV等信号进行处理,这个信号处理函数,通过一个名叫"android:debuggerd"的sock连接到debuggerd进程;原来,信号处理函数做为此sock的客户端,而debuggerd作为服务端;

    4、综上所述,源头都是程序的段错误信号SIGSEGV,它的出现,使进程执行信号处理函数,连接debuggerd,而debuggerd一方面做为 "android:debuggerd" sock即信号处理函数的服务端,另一方面,它完成一次跟信号处理函数的连接后,又进一步作为“Thread-XX”的客户端,读取crash现场信息,传给“Thread-XX”做tombstone保存;debuggerd是把SIGSEGV信号通知给system_server的桥梁;

    5、上述的过程涉及的主要源码在如下几个文件:

NativeCrashListener.java (frameworks\base\services\core\java\com\android\server\am)

Linker.cpp (bionic\linker)

Debuggerd.cpp (system\core\debuggerd)

Tombstone.cpp (system\core\debuggerd)

    知道了上述的大致流程,再去总结到底哪里出了问题?

    同时上网搜索debuggerd,发现也有人遇到过类似的问题:

    http://blog.csdn.net/ffmpeg4976/article/details/48666265

    框架的这个流程中,会出现一些异常情况是android没考虑到的:“Thread-XX”和debuggerd的sock连接,如果服务端异常情况,那么客户端有可能阻塞在connect上;那么在debuggerd的处理流程中,加上超时机制,使之出现问题时不要一直阻塞;而NativeCrashListener在异常时,删掉sock,debuggerd自然也不会阻塞;

  • 3.继续查debuggerd阻塞的另一种情况:D状态

这样修改代码后,以为不会再出现,测试了好几台机器,三天下来,都没出现,但没想到持续测试,虽然降低了概率,却又出现了定屏,这时候,发现debuggerd 就一直D状态,本来就一直疑惑为什么debuggerd 时常是D状态,看来还得继续往下查这个D状态;

   这只能深入到linux内核,详细摸清debuggerd 跟信号处理函数的sock连接,对照代码,总结出如下流程:

   1、客户应用master 进程发生native crash,也就是段错误,这个会让内核产生 SIGSEGV 信号;

   2、被 bionic 的 linker 设置的 信号处理函数拦截 SIGSEGV,信号处理函数会通过sock 连接 debuggerd 守护进程;让debuggerd 做crash动作;

   3、debuggerd初始化时,先保证自身忽略所有信号,accept 等候 master 发来的 crash消息,这个当然等到了,之后通过系统调用 ptrace 的 PTRACE_ATTACH 操作进入内核,先建立与 master 进程的调试关系,(ptrace系统调用返回之后会关闭与信号处理函数之间的sock,之后进入后续处理循环);

   4、在内核 PTRACE_ATTACH 期间,debuggerd 把自己设置为 master 的父进程;并调用 send_signal 发送强制终止信号给master,这个过程中,会调用 signal_wake_up 唤醒 master 进程,在ptrace系统调用返回时,可能进行调度;

   5、debuggerd继续运行,进入D状态,调用 wait_on_bit 等待bit19/21标志位清零来唤醒自己;此时,整个过程,一个master进程的 SIGSEGV信号,引发了 debuggerd 进入D状态;等待 JOBCTL_TRAPPING 清零唤醒

   6、在进行调度时,会进入到master的信号处理,在内核信号分发时使master进程修改为 stop 状态,以方便被跟踪调试;

   7、在内核中master线程的上下文中,处理master的信号时,get_signal_to_deliver会依次调用 do_signal_stop  do_jobctl_trap  ptrace_signal  ,都会调用到 ptrace_stop ,之后再退出函数循环;

   如果不是被调试,则原本准备好信号处理函数的环境后,进入到用户空间信号处理函数,处理完再返回内核善后再进入用户空间,

   但由于是被调试状态,ptrace_stop会让master暂停,并唤醒调试进程 debuggerd ,然后schedule出去;

   8、debuggerd 从D唤醒得到运行,得到一些master进程的状态后,从ptrace系统调用返回到用户空间,通过 sock 写个ack给master 的 boinic 信号处理函数

   9、debuggerd继续运行,也通过sock连接到AMS,保存master的tombstone信息,之后再次调用ptrace系统调用,通过PTRACE_DETACH 解除与master的调试关系,使之继续运行;

   10、master 进程的boinic信号处理函数从sock读取到ack回复消息;之后设置信号的处理方式为默认处理方式;杀死自己;并且发送 SIGSTOP 信号给全组线程;然后退出了信号处理函数;

   11、由于master的子线程都会收到信号,继续上面的处理循环,把子线程的tombstone信息都保存起来

 

   这个流程非常复杂,需要深入到内核的信号机制、跟踪调试机制,详细了解kill & ptrace两个系统调用的处理流程,同时涉及一些CPU体系结构的细节,有兴趣的可以通过“LINUX内核源代码情景分析.PDF”详细了解,涉及的主要文件有:

   Signal.c (kernel)

   Ptrace.c (kernel)

   Signal.c (arch\arm\kernel)

   Ptrace.c (arch\arm\kernel)

 

   为了便于分析问题,引入了手动crash内核,保存内存镜像,通过crash分析内存来调试内核的方法,这是分析内核的利器;

  • 4.使用crash工具分析内核ptrace系统调用的阻塞情况

 

   先介绍一下crash工具的常见命令:

启动crash工具:./crash DDRCS0.BIN@0x80000000 vmlinux

crash> help //帮助命令,显示出crash支持的命令

crash> log    //打印dmesg

还有  bt   whatis    rd    task    struct     list    kmem   dis  p mach   ps   foreach 等命令,不一一介绍了,分析时都会有用到

   上述第3节介绍了debuggerd睡在一个标志位上,即wait_on_bit(&task->jobctl, JOBCTL_TRAPPING_BIT ,ptrace_trapping_sleep_fn, TASK_UNINTERRUPTIBLE);

   睡在这个JOBCTL_TRAPPING_BIT标志位上的线程,会通过如下代码唤醒:

void task_clear_jobctl_trapping(struct task_struct *task)

{

   if (unlikely(task->jobctl & JOBCTL_TRAPPING)) {

      task->jobctl &= ~JOBCTL_TRAPPING;

      wake_up_bit(&task->jobctl, JOBCTL_TRAPPING_BIT);

   }

}

   它对应的ptrace系统调用睡眠的代码:

   ptrace调用过程:

  

   debuggerd调用ptrace,ptrace会通过信号机制,发送信号给要调试的线程master,master的信号处理过程,又会调用 ptrace_stop--> task_clear_jobctl_trapping,再唤醒debuggerd,大致流程就是这样;

   通过crash也可以看出:

   先找出处于调试态的线程,和处于D状态的debuggerd 线程号

   打印debuggerd/30403的函数调用栈

   正常情况下,30403线程schedule出去时,会把debuggerd 从D状态唤醒,现在问题就是,为什么debuggerd没有被唤醒呢?

   &task->jobctl变量会不会产生竞态呢?从代码可以看到,它都通过了spin_lock_irq(&sighand->siglock);锁的保护;

   通过 task -x 30403 命令查看&task->jobctl等变量,状态都对:

   是否还有种可能,ptrace系统调用在执行wait_on_bit时,刚好判断完这个标志,正准备schedule时就被调度出去了,然后master线程进入内核的信号处理流程,把这个变量&task->jobctl的JOBCTL_TRAPPING位修改了,调用了task_clear_jobctl_trapping-->wake_up_bit,却白操作了,因为这时候debuggerd还没睡;再回到debuggerd时,调用schedule睡眠;但master线程因为JOBCTL_TRAPPING位已经为0,就再也调不到wake_up_bit了!

   也一度怀疑,是否jobctl变量的值缓存在寄存器中未刷新,导致没有调用到wake_up_bit

   还是通过dis -l 反汇编命令看看这些函数的情况吧

   上述r0是第一个参数,即struct task_struct *task;通过struct 命令,偏移0x270就是&task->jobctl,这样确实可以看到task 30403 的JOBCTL_TRAPPING 标志位用str指令清零了

   通过ps可以看出,debuggerd在cpu1上,master及其子线程在cpu0上,那会不会是因为多cpu并发导致的呢?以及各cpu有硬件cache机制,且执行指令有流水线,这边cpu0写进去了,实际那边cpu1在wake_on_bit时取到的还是老值,这样分析,我觉得是有可能的;

   于是拿来了展讯的代码,signal.c看了下,发现展讯的代码在修改&task->jobctl后,调用了 smp_mb();内存屏障操作,再调用wake_up_bit,这样就能消除上面的竞态;代码修改如下:

  

   这样修改之后,再行测试,debuggerd 不再长期处于D状态了;再也没出现过这种定屏问题了

   同时,我也屏蔽了if判断,只要进到此函数,都调用wake_up_bit,再做测试,也没出现过定屏,如下:

   因为此函数会进来多次,错过了一次,后面能“补刀”,防止再出现问题;

 

三.总结

此问题解决办法:

   1、删掉debuggerd,即禁止掉android的native crash调试机制;这样缺点是native crash调试现场抓不到,不利于分析一些问题

   2、修复android框架及kernel中的漏洞;

 

   经验教训:

   1、遇到低概率问题,想办法复现问题,则离解决问题就近了一半,比如此问题,发现了native crash时才会触发,那就想办法产生更多的native crash,发现装上豌豆荚,很容易出现native crash;营造复现环境;

   2、丰富调试手段,比如bugreport,debuggerd,sysrq_trigger,crash

   3、此问题涉及了android和linux的核心机制,必须理顺代码流程,将疑点追查到底,方可解决问题;

 

最后不得不佩服前同事个人技术能力的强悍,给点个赞。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 0708进制,运算,条件语句,循环语句(while)

    0708 进制 二进制用0 1来表示八进制三位二进制来表示一个八进制数十进制 十六进制四位二进制来表示一个十六进制数位运算 &位与运算只有1&1为1,其余全为0 任何数与2的n次方减1为原数值|位或运算1|1=1,0|1=1,1|0=1,0|0=0^异或运算00=0,10=0,01=1,10=1位非运算 ~str.…...

    2024/4/16 1:35:29
  2. Java代码优化

    类名、方法名、变量名需要使用全英文,尽量不要使用缩写和拼音 合理的命名可以替代注释,提高可读性。 单个类文件和单个方法的代码不要过多 不要一个方法上千行,也不要每个方法只有2行,然后a方法调b方法,b方法调c方法这样跳来跳去。 要合理设计,不要左倾也不要右倾。 添加…...

    2024/4/16 1:35:24
  3. Hystrix的入门使用总结

    文章目录1.概念1.1 服务雪崩1.2 服务降级1.3 Hystrix资源隔离2.入门案例2.1 搭建一个服务提供者2.2 搭建一个服务消费者2.3 测试3.Hystrix请求缓存3.1创建HystrixRequestContextFilter3.1创建请求缓存服务3.3 新增控制层3.4 测试4.搭建Hystrix Dashboard 监控5.相关文档 1.概念…...

    2024/4/16 1:36:30
  4. 【C语言】关于枚举的那些事儿~

    01、目录 目录01、目录02、枚举介绍03、枚举的三种定义方式3.1 定义枚举类型,同时定义变量3.2 定义时省去类型名,直接要变量3.3 定义时先定义枚举类型名,后定义变量04、枚举的本质05、宏与枚举的区别06、枚举在Linux内核和标准库中的广泛应用6.1 Linux内核6.2 标准库中07、枚…...

    2024/4/16 1:36:10
  5. 求简单交错序列前N项和 (15分)

    #include<stdio.h> #include<math.h> int main() {int n,p;double i=1,t,sum=0;scanf("%d",&n);for(i=1;i<=n;i++){p=pow(-1,i+1);t=1/(3*i-2);sum=sum+t*p;}printf("sum = %.3f",sum);return 0; }...

    2024/4/1 3:26:35
  6. css绝对定位元素的位置

    ...

    2024/4/16 1:36:35
  7. Spring Boot 使用oshi监控服务器数据

    1,导入依赖<!--服务器监控包--> <dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>3.9.1</version> </dependency>2,导入文件包链接:https://pan.baidu.com/s/1TfLP8-mNmI1…...

    2024/5/7 19:42:20
  8. vb.net excel操作:填充人事档案表并打印

    节选自:《Visual Basic.Net 循序渐进》【例 21.7】【项目:code21-007】填充人事档案表并打印。本例使用到的Excel文件为:职员信息登记表.xlsx,如下图所示:图21-10 职员信息登记表窗体设计如下图所示(注意:为了演示方便,已经填充了数据):图21-11 窗体设计在本例中还需…...

    2024/5/7 19:38:53
  9. 小demo:slideDown()实现二级菜单栏下拉效果

    效果如下,鼠标经过显示隐藏的二级菜单栏但是这样的时候会存在一个问题,就是鼠标快速不停移入移出会导致二级菜单栏闪屏现象,一般需要使用stop()来清除事件<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title>…...

    2024/5/7 21:18:11
  10. 删除JSON属性[重复]

    本文翻译自:Remove a JSON attribute [duplicate]This question already has an answer here: 这个问题在这里已有答案: How do I remove a property from a JavaScript object? 如何从JavaScript对象中删除属性? 39 answers 39个答案 if I have a JSON object say: 如果我…...

    2024/5/7 19:39:53
  11. java的ArrayList笔记

    //ArrayList 长度可以改变 /*对于ArrayList集合来说,直接打印得到的不是地址值,而是内容 如果内容是空,则得到的是中括号: [ ] / /** 备注:ArrayList add添加动作一定是成功的,所以返回值可用可不用 但是对于其他集合来说,add 不一定成功 1、public boolean add(E e):向集…...

    2024/4/16 1:35:29
  12. 狂神说java学习笔记---运算符

    运算符Java语言支持如下运算符:优先级:最好使用()算术运算符:+,-,*,/,%(余),++(自增),–(自减);赋值运算符:=;关系运算符:> , < , >= , <= , == , != , instanceof; 计算结果一定是true or false;以后会和if一起用逻辑运算符:&& (…...

    2024/4/16 1:36:30
  13. JAVA collections API

    Collections 工具类和 Arrays 工具类常见方法Collections排序操作 查找,替换操作 同步控制Arrays类的常见操作排序 : sort() 查找 : binarySearch() 比较: equals() 填充 : fill() 转列表 asList() 转字符串 toString() 复制 copyOf()Collections 工具类和 Arrays 工具类常见方…...

    2024/5/7 17:48:10
  14. 软件工程-第3章复习总结

    3-1 代码评审分析与优化 A. 为什么要进行代码评审?代码 Review,是被主流行业普遍认同的,提高代码质量的有效途径之随着人们对软件质量要求的不断提高,软件开发的每一个环节都应该得到十足的重视代码评审最主要的目的是确保代码库一直保持「健康」的状B. 如何选择最合适的编程语…...

    2024/4/16 1:35:24
  15. Python 海龟绘图 100 题——第 67 题

    题目:绘制下面的图形解析: 绘制伞。 答案: 方法一 使用循环绘制圆 import turtle as t for i in range(0,90):t.fd(0.0174*30)t.rt(1) t.lt(180) for i in range(0,180):t.fd(0.0174*30)t.rt(1) t.lt(180) for i in range(0,180):t.fd(0.0174*90)t.lt(1) t.lt(180) for i in…...

    2024/5/7 18:33:22
  16. 1351C - Skier (1400)

    1351C - Skier 题意: NSWE代表上下左右4个方向,每次走一个单位,第一次走的路花费时间5,不是第一次走的路花费时间1,求最后所花时间 思路: 暴力嗷,假设是从原点开始走的,map记录一下就能随便写了 代码附: #pragma GCC optimize("Ofast","inline",&…...

    2024/4/19 7:13:38
  17. 删除user.ini提示Operation not permitted的解决办法

    1.进入到`.user.ini所在目录,执行一下 lsattr -a,查看文件下下边包含文件的属性,看到`.user.ini有个i属性,代表不得任意更动文件或目录2.然后执行命令chattr -i .user.ini3.就可以去除掉此属性,然后我们再执行删除,就可以顺利删除掉了。...

    2024/4/16 1:36:25
  18. int封装成Integer的小知识点

    若整数在-128到127之间,封装的Integer是同一个...

    2024/4/17 0:04:41
  19. ll

    路由称为URL(Uniform Resource Locator,统一资源定位符),也可以称为URLconf,是对可以从互联网上得到的资源位置和访问方法的一种简洁的标识,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的路由,用于支出网站文件的路径位置。简单的说,路由可视为我们常说…...

    2024/4/26 13:13:07
  20. 内容提供者(小扩展)

    手机中存在的内容提供者联系人通话记录短信音频图片视频 联系人 首先要在清单文件中添加静态权限,才能访问手机中的联系人<uses-permission android:name="android.permission.READ_SMS"/>//查询联系人 public void GetLinkman() {//获取提供者ContentResolve…...

    2024/4/16 19:48:42

最新文章

  1. 注意!华为HCIP-Datacom认证考试题有变化!

    01 注意 HCIP Datacom H12-831考试变题了&#xff0c;最近要考试的多观望一下&#xff0c;821目前稳定。 华为HCIP考试以后要加难度&#xff0c;增加实验题&#xff0c;还没考完的小伙伴抓紧时间了。 02 华为HCIP认证大更新 未来将增加实验考试&#xff0c;拒绝背题库的Pass&a…...

    2024/5/7 23:58:04
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. git修改某个远端服务器的地址的方式以及4种remote

    假设本地有1个远端仓库&#xff0c;默认一般叫origin&#xff0c;原来对应的git url是&#xff1a;gitxxx.git # 查看方式&#xff1a; git remote -v# 修改方式&#xff1a; git地址url指定远程仓库&#xff1a;&#xff08;常用&#xff09; git remote set-url origin gitn…...

    2024/5/5 10:38:25
  4. Android Framework学习笔记(2)----系统启动

    Android系统的启动流程 启动过程中&#xff0c;用户可控部分是framework的init流程。init是系统中的第一个进程&#xff0c;其它进程都是它的子进程。 启动逻辑源码参照&#xff1a;system/core/init/main.cpp 关键调用顺序&#xff1a;main->FirstStageMain->SetupSel…...

    2024/5/4 10:39:30
  5. Verilog基础【二】

    3.1 Verilog 连续赋值 关键词&#xff1a;assign&#xff0c; 全加器 连续赋值语句是 Verilog 数据流建模的基本语句&#xff0c;用于对 wire 型变量进行赋值。&#xff1a; assign LHS_target RHS_expression &#xff1b;LHS&#xff08;left hand side&#xff09;…...

    2024/5/7 3:16:07
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57