zoukankan      html  css  js  c++  java
  • adb常用命令

    adb devices, 

    adb install -r xxx.apk   ,

    adb uninstall 包名,  

    adb shell//进入手机系统,

    adb pull 手机  电脑 adb pull /sdcard/report.xml D: esting

    adb push电脑  手机  

    pwd   //显示当前路径

    adb shell screen cap   /sdcard/a.png   //截屏保存到sd卡

    adb shell screen record /sdcard/demo.mp4    //对手机录屏,只能4.4以上的版本

    adb shell pm list packages //显示所有的包名,package要+s

    adb shell pm list package -3 //显示第三方的包名 , package不要+s

    aapt dump badging xxxx.apk  >c:apk.txt //将apk文件拖过来,显示此apk的包名和启动类,后面的表示保存到c盘下,否则全部打印在控制台

    adb shell rm -rf sdcard/report.xml //删除report文件

     

    如何导出ANR log

    adb devices

    adb shell

    su

    cd data

    ls

    cd anr

    adb pull /data/anr/traces.txt D:  //即可导出到D盘进行分析

     

    ANR一般的三种类型:

    1:KeyDispatchTimeout(5 seconds) --主要类型

    按键或触摸事件在特定时间内无响应

    2:BroadcastTimeout(10 seconds)

    BroadcastReceiver在特定时间内无法处理完成

    3:ServiceTimeout(20 seconds) --小概率类型

    Service在特定的时间内无法处理完成

    为什么会超时呢?

    超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种

    (1)当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper(有消息循环的线程)被某种原因阻塞住了)

    (2)当前的事件正在处理,但没有及时完成

    如何避免KeyDispatchTimeout

    1:UI线程尽量只做跟UI相关的工作

    2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理

    3:尽量用Handler来处理UIthread和别的thread之间的交互

    UI线程

    UI线程主要包括如下:

    1. Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick(),etc
    2. AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel,etc
    3. Mainthread handler: handleMessage(), post*(runnable r), etc
    4. other

    如何调查并解决ANR

    1:首先分析log

    2: 从trace.txt文件查看调用stack.

    3: 看代码

    4:仔细查看ANR的成因(iowait?block?memoryleak?)

    如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR

    如果CPU使用量很少,说明主线程被BLOCK了

    如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的

    除了看LOG,解决ANR还得需要trace.txt文件

    如何分析ANR

    1,如果是ANR问题 , 则搜索“ANR”关键词 。 快速定位到关键事件信息 。

    2,如果是ForceClosed 和其它异常退出信息,则搜索"Fatal" 关键词, 快速定位到关键事件信息 。

    3,定位到关键事件信息后 , 如果信息不够明确的,再去搜索应用程序包的虚拟机信息 ,查看具体的进程和线程跟踪的日志,来定位到代码 。

    如何解决ANR

    (1)耗时的操作放入单独的线程中处理,如(联网、数据库、IO)

    (2)尽量避免和UI线程的操作

    adb shell pm clear com.sohu.sohuvideo //后台清除此应用

    adb shell am force-stop com.sohu.sohuvideo //将应用退出到后台

    adb shell dumpsys memoryinfo //查看内存

    adb shell dumpsys activity top //查看栈顶Activity,可以用来获取包名,可以用来查看其它app的包名

    adb shell ps //查看进程信息

    adb shell cat /proc/cpuinfo //查看手机CPU,可以看到手机架构(eg.ARMv7) 和几核处理器

     

    exit //退出当前shell

    ctrl+C //开启新的shell命令

  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/yuchne/p/10902140.html
Copyright © 2011-2022 走看看