常见AMS log

  • Post author:
  • Post category:其他



说明:


pid指进程id。pid 是进程的身份标识,程序一旦运行,就会给应用分配一个独一无二的pid(ps:一个应用可能包含多个进程,每个进程只有唯一一个pid),进程终止后pid会被系统回收,再次打开应用,会重新分配一个pid(新进程的pid一般比之前的值要大)

查看命令 :

adb shell ps

uid指用户的id。为了实现数据共享,android为每个应用几乎都分配了不同的uid,使之成了数据共享的工具。

查看命令 :命令:

adb shell  cat  /proc/PID号/status

因此在android中pid、uid都是用来识别应用程序的身份的,但uid是为了不同的程序来使用共享的数据。


(1) process 相关的log



ActivityManager: START u0 {act=android.media.action.STILL_IMAGE_CAMERA flg=0x80000 cmp=com.htc.camera3/.CameraEntry (has extras)} from uid 10020 pid 26314


点击应用入口进入应用触发此log,新的activity还没有创建之前打印此log

act — 表示被调用启动的activity的action,此处是activity com.htc.camera3/.CameraEntry的action

cmp — 表示被调用启动的 activity,此处启动的activity 为com.htc.camera3/.CameraEntry

uid — 表示发起调用的 uid

pid — 表示发起调用的 pid,可以通过查询pid知道当前应用包名

Android规定android.system.uid=1000,具有该Uid的application,我们称之为获得Root权限


ActivityManager: Start proc 23009:com.htc.albumgp/u0a20 for activity com.htc.albumgp/com.htc.album.AlbumMain.ActivityMainTabHost


在新的activity创建前打印此log,生成新应用的pid

23009 — 表示要启动的activity 的 pid

u0a20 — pid 对应的UserID


ActivityManager: Start proc 23024:com.htc.pitroadCN/u0a77 for broadcast com.htc.pitroadCN/com.htc.pitroad.gametuning.receiver.GameTuningReceiver


23024 — 表示要启动的broadcast receiver的 pid

u0a77 — pid 对应的UserID

Start proc表示应用进程第一次启动

Start u0 表示启动已存在堆栈中的应用


ActivityManager: Start proc 23056:com.htc.mediamanager/u0a20 for service com.htc.albumgp/com.htc.mediamanager.providers.media.MMPService


23056 — 表示要启动的service 的 pid

u0a20 — pid 对应的UserID


ActivityManager: Killing 3434:com.google.android.partnersetup/u0a45 (adj 906): empty #17


3434 — 表示kill掉的进程的pid

u0a45 — 表示kill掉的进程的pid所在的userId

empty — 表示kill的原因

adj 906 — 906 不可见进程的adj最大值

系统是根据各个app四大组件的状态来决定进程的优先级值adj。系统会根据一定的策略先去回收优先级最低的(同时也是adj值最大的),其次再回收优先级略低的,依次类推,直到回收了足够的系统资源,保证系统正常运转。

Process : killProcessQuiet, pid=

被killed的pid


(2) activity 生命周期相关的log



Displayed com.android.settings/.Settings$NetworkDashboardActivity: +279ms (total +1s32ms)


说明已经走完onResume,activity显示出来了

 第一个时间表示系统接受到打开的intent到HomeActivity界面显示出来的时间0.279秒。
 第二个时间特殊情况下才会有。例如这种调用流程:A->B(在onCreate立刻finish掉自己,直接跳转到C)->C(TestActivity),它包含了B页面onCreate处理以及finish的时间。
 这个时间如果过长,会导致用户点击跳转后,页面还停留在原来界面,延迟一段时间再跳转。这种体验很差,用户会觉得卡顿并容易点击多次。很多应用程序的入口页面,都设计成这种情况的跳转。


(3) service 相关的 log


ActivityManager: startService: Intent { cmp=com.android.phone/.NetworkQueryService } type=null args=null pid=2508


Start service打印此log

cmp — 启动的service的名字

pid — 发起调用service的包 com.android.phone所在的进程号

如果Service没有设定属性android:process=”:remote” 
Service会和Activity是在同一个进程中的,而且都是主线程 
如果Service设定属性android:process=”:remote” 
那么就会创建新进程,这时Activity可以通过跨进程访问Service中的数据


ActivityManager: stopService: Intent { cmp=com.android.settings/.framework.service.ChargerWarningService } type=null pid=2220


Stop service打印此log

cmp – 停止的service的名字

pid — 发起调用service的包com.android.settings所在的进程号


(4) broadcast 相关的 log



ActivityManager: registerReceiver filter=f500a3b from com.android.phone,userId=0,pid=2508,uid=1001,rec=1e29c35

filter – filter的对象的值

pid — broadcast所在的com.android.phone 的pid

uid — broadcast所在的com.android.phone 的uid

rec — 注册的对象的值


ActivityManager: broadcast act=android.media.VOLUME_CHANGED_ACTION flg=0x14000000 from pid=1744, uid=1000,parallel BR:a57ef64,u-1,size=3,replaced=0,order BR:null,size=0,resultTo=null


在调用sendBroadcast 时打印此log

act — broadcast的过滤的名字

pid — broadcast所在的pid

uid — broadcast所在的uid

BR — BroadcastRecord的对象的值

size — registeredReceivers的个数

如果 resultTo == null, 则打印 BR:null,size=0,resultTo=null



版权声明:本文为a396604593原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。