加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Android 框架题目说明案例 - 谁杀了桌面?

发布时间:2019-09-20 09:01:23 所属栏目:业界 来源:高爷
导读:写这篇文章的契机是由于一个实境碰着的题目 , 这个题目着实不难 , 不外在说明白这个题目然后写日志的时辰 , 我溘然认为这个题目说明的进程有须要记录一下 , 分享给各人。说明进程中有效到一些器材 , 一些要领 , 也从其它一个智慧的小搭档梅明哪里学到了一

ActivityManagerService.killBackgroundProcesses

  1. public void killBackgroundProcesses(final String packageName, int userId) { 
  2. ...... 
  3.             synchronized (this) { 
  4.                 killPackageProcessesLocked(packageName, appId, targetUserId, 
  5.                         ProcessList.SERVICE_ADJ, false, true, true, false, "kill background"); 
  6.             } 

对源码较量认识的同窗可以很快知道 , AMS.killBackgroundProcesses 这个接口会提供应三方应用去挪用 , 其 Binder 的客户端在 ActivityManager.killBackgroundProcesses 这里

ActivityManager.killBackgroundProcesses

  1. /** 
  2.  * Have the system immediately kill all background processes associated 
  3.  * with the given package.  This is the same as the kernel killing those 
  4.  * processes to reclaim memory; the system will take care of restarting 
  5.  * these processes in the future as needed. 
  6.  * 
  7.  * @param packageName The name of the package whose processes are to 
  8.  * be killed. 
  9.  */ 
  10. @RequiresPermission(Manifest.permission.KILL_BACKGROUND_PROCESSES) 
  11. public void killBackgroundProcesses(String packageName) { 
  12.     try { 
  13.         getService().killBackgroundProcesses(packageName, 
  14.                 mContext.getUserId()); 
  15.     } catch (RemoteException e) { 
  16.         throw e.rethrowFromSystemServer(); 
  17.     } 
对 SystemServer 历程举办断点 Debug

知道了上面的代码逻辑 , 我们必要做的就是找到在这个场景下 , 是哪个应用挪用 ActivityManager.killBackgroundProcesses 杀掉了桌面. 因为不知道详细是哪个应用(这里固然我们猜疑是 com.jx.cmcc.ict.ibelieve , 可是没有证据) , 我们先对 SystemServer 历程举办 Debug .

1.起首对源码举办 debug , 起首在 Android 中点击 debug 按钮 , 选择 system_process 这个历程(就是我们所说的 SystemServer) , 然后点击 OK . 代码的断点我们打在上面列出的 ActivityManagerService.killBackgroundProcesses 要领内里。

Android 框架题目说明案例 - 谁杀了桌面?

2.点击启动猜疑的 App ( 可以从 EventLog 和视频内里倒推,找到较量可疑的 App , 安装后举办当地测试复现 , 这里选择了视频中呈现的几个应用,包罗我们之前猜疑的 com.jx.cmcc.ict.ibelieve- 和我信 ) , 点击其他的应用都不会进入到这个断点, 而在点击 和我信 这个 App 启动后走到的断点。

Android 框架题目说明案例 - 谁杀了桌面?

3.这里我们可以看到挪用栈是一个 Binder 挪用 , 我们必要找到这个 Binder 挪用的客户端. 在 AS 内里继承操纵 , 点击如下图的计较器按钮 , 输入 getRealCallingPid() 点击下面的 Evaluate , 就可以看到功效. result = 29771

Android 框架题目说明案例 - 谁杀了桌面?

4.通过 PS 呼吁 , 查察这个 pid 对应的 app。

Android 框架题目说明案例 - 谁杀了桌面?

可以看到就是这个应用挪用的 killBackgroundProcesses。

对 App 历程举办断点 Debug

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读