(2018.11.08)Android Profiler基础使用

本文详细介绍AndroidProfiler在Android Studio中的使用,包括CPUProfiler的线程跟踪、内存Profiler的内存分析和内存泄漏检测,帮助开发者优化和调试代码。


(转载公司内部论坛本人文章2018.11.08)

一、概览

导语 : 2017年Google I/O大会上发布了Android Studio 3.0,其中一项更新是将之前内置的Android Monitor换成了Android Profiler。最新版Android Studio3.2已经移除了DDMS的入口了,感觉Google是想用Android Profiler完全取代DDMS。

Google官网有几篇文章介绍了Android Profiler使用方法,这里我只是做了一下搬运工,结合自己的Demo得出的一些理解。如果有理解错漏的地方,欢迎指出。

个人觉得Android Profiler相比DDMS最大的优势在于它集成于Android Studio,为我们Android应用提供了 实时 检测工具,同时界面交互比较友好,能够快速简单的获取到我们想要的CPU,内存等信息。

Profiler入口:点击 ** View > Tool Windows > Android Profiler** ,或者点击Studio右下角的Profiler。
在这里插入图片描述
打开之后界面如下图,CPU,MEMORY(内存),NETWORK(网络),ENERGY(耗电,android studio3.2新增)四大部分。本文主要介绍 CPU内存 部分。
在这里插入图片描述

二、CPU Profiler(CPU分析器)

CPU Profiler 可帮助我们实时检查应用的 CPU 使用率和线程活动,并进行函数跟踪,以便我们优化和调试应用代码。打开视图如下:
在这里插入图片描述

  1. Event 时间线: 显示应用中Activity的生命周期,及用户与设备交互事件,比如按返回键,屏幕旋转等。

  2. CPU 时间线: 分别显示了应用的实时 CPU 使用率,其他进程的CPU使用率,以及应用使用的线程数。

  3. 线程活动时间线: 列出进程的每个线程,并使用下面列出的颜色沿时间线标示它们的活动情况。

  • 绿色: 表示线程处于活动状态或准备使用 CPU。 即,它正在“运行中”或处于“可运行”状态。

  • 黄色: 表示线程处于活动状态,但它正在等待一个 I/O 操作(如磁盘或网络 I/O),然后才能完成它的工作。

  • 灰色: 表示线程正在休眠且没有消耗任何 CPU 时间。 当线程需要访问尚不可用的资源时偶尔会发生这种情况。 线程进入自主休眠或内核将此线程置于休眠状态,直到所需的资源可用。

下面我用一个简单的Demo说明CPU Profiler的使用,先看测试代码:

public class ProfilerActivity extends AppCompatActivity {
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 1) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                sendEmptyMessageDelayed(1, 500);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profiler);
        mHandler.sendEmptyMessage(1);
    }
}

代码比较简单,在Activity中有一个Handler,500ms循环一次,每次让线程sleep100ms,记录CPU使用情况,点击上面的 Record 按钮,大约3秒后Stop,会生成如下四个视图(Call Chart、Flame Chart、Top Down、Bottom Up)
在这里插入图片描述

1、Call Chart(调用图)

Call Chart图如上图。其实在真实项目中,生成的图比这个看起来复杂多了。但只要你弄清它们的关系,Call Chart展示的调用关系还是挺清晰的。

首先每个横条代表一个函数的运行时间,具体颜色区分如下:

  • 橙色: 对系统 API 的函数调用

  • 绿色 :对应用自有函数的调用

  • ** 蓝色:** 对第三方 API(包括 Java 语言 API)的函数调用

Call Chart图可以简化为下面表示例:
在这里插入图片描述

图中看出,D函数的运行时间 Total time = Self Time + Children time (C和B的运行时间)

鼠标放在每个横条上会显示函数的运行时间,如图显示每次 handleMessage()方法大约执行了102ms,然后大概500ms循环一次。 点击右键还可以Jump to Source跳转到原代码处。

总结:Call Chart图显示了应用内所有函数的调用关系以及运行时间,方便开发者快速查看某个时间点应用内函数的调用和耗时情况。

2、Flame Chart(火焰图)

在这里插入图片描述

切换至Flame Chart。Flame Chart颜色没有特殊含义。看似是Call Chart的倒置,其实不完全是这样。Flame Chart会将调用顺序完全相同的函数归类成一个横条,怎么理解这个调用顺序相同呢?如下的调用图(Call Chart)
在这里插入图片描述

由于 B^1、B2^ 和 B^3^ 共享相同的调用顺序 (A → D → B),所以在火焰图(Flame Chart)中会合并成一个横条。同理,C^1^ 和 C^3^ 也会汇总在一起。所以Flame Chart图如下:
在这里插入图片描述

此时,X轴不在表示调用时间,而表示每个函数相对的运行总时间。

总结:Flame Chart更方便开发者查询哪些函数消耗的时间最多。火焰图如果看顶层的哪个函数占据的宽度比较大,就表示该函数可能存在性能问题。

3、Top Down

Top Down显示一个函数调用列表,展开后可以查看函数的被调用方。可以理解为,Flame chart 是Top down 的图形化表示形式。
在这里插入图片描述

4、Bottom Up

Bottom Up列出了所有执行函数的时间,点开后是它的调用方,按运行时间排序。
在这里插入图片描述

三、Memory Profiler(内存分析器)

Memory Profiler显示一个应用内存使用量的 实时图表 ,可以 捕获堆转储 、以及 跟踪内存分配
在这里插入图片描述

  1. 分别是强制垃圾回收按钮,Dump Java Heap(捕获堆转储)按钮,如果是Android7.1及以下系统,旁边会Record按钮。

  2. 实时显示了每个内存类别使用了多少内存,虚线表示分配的对象数,以及垃圾回收Event图标。
    在这里插入图片描述
    内存计数的类别如下:

  • Total: 应用占用内存总量

  • Java: 从 Java 或 Kotlin 代码分配的对象内存。

  • Native: 从 C 或 C++ 代码分配的对象内存。即使您的应用中不使用 C++,您也可能会看到此处使用的一些原生内存,因为 Android 框架使用原生内存代表您处理各种任务,如处理图像资源和其他图形时,即使您编写的代码采用 Java 或 Kotlin 语言。

  • Graphics: 图形缓冲区队列向屏幕显示像素(包括 GL 表面、GL 纹理等等)所使用的内存。 (请注意,这是与 CPU 共享的内存,不是 GPU 专用内存。)

  • Stack: 您的应用中的原生堆栈和 Java 堆栈使用的内存。 这通常与您的应用运行多少线程有关。

  • Code: 您的应用用于处理代码和资源(如 dex 字节码、已优化或已编译的 dex 码、.so 库和字体)的内存。

  • Other: 您的应用使用的系统不确定如何分类的内存。

  • Allocated: 您的应用分配的 Java/Kotlin 对象数。 它没有计入 C 或 C++ 中分配的对象。

1.Dump Java Heap(捕获堆转储)

点击上面的Dump Java Heap  按钮,过会会倒出你应用java堆中所有的类型
在这里插入图片描述

图中可以看到应用中自己的Activity,右边数字栏所表示的意义如下:

  • Allocations: 该类在堆中已分配实例数

  • Native Size: 由 C 或 C++ 代码分配的实例总大小

  • Shallow Size :此堆中所有实例的总大小(以字节为单位)。

  • Retained Size 为此类的所有实例而保留的内存总大小(以字节为单位)。

图中可以看到ProfilerActivity实例数是3,为什么会是3呢?可以看到demo代码中,我用非静态Handler实现了一个定时逻辑,非静态内部类默认持有外部类引用,所以造成了内存泄漏。ProfilerActivity启动了3次,所以就会有三个。点击右边会显示Instance View图。这就是堆中那三个ProfilerActiity,展开还可以看到实例内部的组成。
在这里插入图片描述在这里插入图片描述

点击单个实例,下方会显示该实例的References(引用图),显示该实例的所有引用。可以看到第一个引用就是那个Handler,点击右键Jump To Source果然跳转到Hander初始化代码处。
在这里插入图片描述

由于我这个是demo代码,页面代码比较简单,所以很容易就能找出自己代码中出现的泄漏问题。但是实际项目中查找起来会复杂很多。这里有一个小技巧,在Heap图中可以通过切换按包名排序(Arrange by package),通过包名,我们能更方便的查找到我们所关心的类的内存占用情况。
在这里插入图片描述
在这里插入图片描述

2、跟踪内存分配

如果你的设备是Android 8.0及以上的,可以随时在内存图上拖动鼠标,选取你想要查看内存分配的时间段。如果你的设备是 Android 7.1 或更低版本,则在 Memory Profiler 工具栏中点击 Record按钮 。 记录时,Android Monitor 将跟踪您的应用中进行的所有分配。
在这里插入图片描述

选取时间段后会生成Live Allocation图,右边数字栏所表示的意义如下(在你所选取的时间段内):

  • Allocations: 表示你所选取时间段内,该类在堆中已分配实例数

  • Deallocations: 表示你所选取时间段内,该对象在内存中被回收的次数。

  • Total Count 总数。

  • Shallow Size 所有实例的总大小(以字节为单位)

点击查看Instance View图,可以看到 User对象ItemsActivity 的创建时间和回收时间基本是一致的。并且在Allocation Call Stack中还可以看到User对象是在ItemsActivity的o nCreate() 方法里被创建的。
在这里插入图片描述
在这里插入图片描述

public class ItemsActivity extends AppCompatActivity {
    private User mUser;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profiler);
        mUser = new User();
    }
}

总结:Memory Profiler可以让我们很方便的查看我们应用的内存占用情况,并且可以很方便实现对单对象的内存追踪和检测内存泄漏等

以上是我对Android Profiler使用方法的一些介绍,其中的错漏,欢迎指出,大家一起探讨。

参考资料:

https://developer.android.google.cn/studio/profile/

END

HwOcrImeController: updateMultiWindow focus window = com.fengyun.game.qp/org.cocos2dx.lua.AppActivity mIsInMultiScreen = false 行 31920: 11-16 10:16:30.875 1360 1407 I AGPService: FrameRateManager:[HandleFrameRateRefresh] currPkgName: com.fengyun.game.qp, strategyCode 1242: dynamicCode 1, isFactor 0, min 30, max 90, down 90, idle 60 行 32137: 11-16 10:16:31.943 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_WINDOW_FOCUS_CHANGE 行 32138: 11-16 10:16:31.943 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_WINDOW_FOCUS_CHANGE 行 32264: 11-16 10:16:32.852 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 32265: 11-16 10:16:32.852 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 32472: 11-16 10:16:34.457 1858 2762 I ContentProviderHelper: Successfully start provider ContentProviderRecord{46a5a9 u0 com.fengyun.game.qp/com.tencent.android.tpush.SettingsContentProvider} launchingApp=null caller pid= 26315 行 32509: 11-16 10:16:35.022 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 32510: 11-16 10:16:35.022 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 32734: 11-16 10:16:37.709 1858 2090 W 00202/hw_netstat: total/145096/15391,com.fengyun.game.qp/145096/15280,com.huawei.hwid/0/111 行 32753: 11-16 10:16:38.028 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 32754: 11-16 10:16:38.028 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 33189: 11-16 10:16:43.510 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 33190: 11-16 10:16:43.510 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 33237: 11-16 10:16:43.743 2390 2390 W InputTransport: channel 45a9e2b com.fengyun.game.qp/org.cocos2dx.lua.AppActivity (client) detect abnormal consume, count is 0 行 33268: 11-16 10:16:44.183 1858 2033 W AlarmManager: WAKEUP alarm trigger action = LOCATION package name is: com.fengyun.game.qp tag: *walarm*:LOCATION window:45000 originWhen:88414098 when:88417098 maxWhen:88462098 行 33269: 11-16 10:16:44.184 1858 2033 I ActivityManager: sendIntentSender target:PendingIntentRecord{d0118ca com.fengyun.game.qp broadcastIntent}, intent:flg=0x4 hwFlg=0x810 行 33270: 11-16 10:16:44.185 1858 2033 I ActivityManager: SendInner finish:PendingIntentRecord{d0118ca com.fengyun.game.qp broadcastIntent} finalIntent:Intent { act=LOCATION hwFlg=0x100 } type:1 callinguid:1000 reslut:0 行 33273: 11-16 10:16:44.196 1858 2762 I BroadcastQueue: Finished with ordered [background] broadcast BroadcastRecord{ff43db9 u0 LOCATION} cost time 12,receiversNum 1,max receiver BroadcastFilter{a5f240e 10231/u0 ReceiverList{c37ba09 2390 com.fengyun.game.qp/10231/u0 remote:4bb4f10}} cost time 5 行 33276: 11-16 10:16:44.201 1858 1905 I 00400/HwGnssLogServices: handlerStatistics:com.fengyun.game.qp, 1 行 33278: 11-16 10:16:44.201 1858 2778 I 00400/HwGpsPowerTracker: recordRequest AppName: com.fengyun.game.qp quality: 100 行 33280: 11-16 10:16:44.202 1858 2778 I 00400/HwQuickTTFFMonitor-V2018.8.27: com.fengyun.game.qp is WhiteApp 行 33281: 11-16 10:16:44.201 1858 2778 I LocationManagerService: request 4D1A8BE0 gps Request[@+900ms HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}] from com.fengyun.game.qp(10231 foreground) 行 33281: 11-16 10:16:44.201 1858 2778 I LocationManagerService: request 4D1A8BE0 gps Request[@+900ms HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}] from com.fengyun.game.qp(10231 foreground) 行 33283: 11-16 10:16:44.202 1858 2778 I 00400/HwQuickTTFFMonitor-V2018.8.27: requestHwQuickTTFF:com.fengyun.game.qp 行 33285: 11-16 10:16:44.202 1858 2778 I LocationManagerService: startOpNoThrow, ops = 41, uid = 10231, packageName = com.fengyun.game.qp 行 33286: 11-16 10:16:44.203 1858 2778 I LocationManagerService: starting location attribution for 10231/com.fengyun.game.qp/4D1A8BE0 行 33287: 11-16 10:16:44.203 1858 2778 I LocationManagerService: startOpNoThrow, ops = 42, uid = 10231, packageName = com.fengyun.game.qp 行 33288: 11-16 10:16:44.205 1858 2778 I 00400/HwLocationManagerService: cache locationRequestInfo=LocationRequestInfo[gps, gps, Request[@+900ms HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}], 10231/com.fengyun.game.qp/4D1A8BE0, 2, android.os.BinderProxy@f5ca7ac] 行 33288: 11-16 10:16:44.205 1858 2778 I 00400/HwLocationManagerService: cache locationRequestInfo=LocationRequestInfo[gps, gps, Request[@+900ms HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}], 10231/com.fengyun.game.qp/4D1A8BE0, 2, android.os.BinderProxy@f5ca7ac] 行 33297: 11-16 10:16:44.204 1858 2116 I GnssLocationProvider: setRequest ProviderRequest[@+900ms, HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}] isGpsEnabled true 行 33307: 11-16 10:16:44.207 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 33331: 11-16 10:16:44.207 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 33854: 11-16 10:16:44.559 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 33855: 11-16 10:16:44.559 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 33871: 11-16 10:16:44.718 1858 2762 I ActivityManager: startService: Intent { act=com.tencent.android.tpush.action.start_slave cmp=com.fengyun.game.qp/com.tencent.android.tpush.service.XGPushServiceV3 } callingPid: 2390 callingPackage:com.fengyun.game.qp 行 33871: 11-16 10:16:44.718 1858 2762 I ActivityManager: startService: Intent { act=com.tencent.android.tpush.action.start_slave cmp=com.fengyun.game.qp/com.tencent.android.tpush.service.XGPushServiceV3 } callingPid: 2390 callingPackage:com.fengyun.game.qp 行 33950: 11-16 10:16:44.808 1858 2116 I 00400/LocationManagerService: packageName com.fengyun.game.qp pemission check result 2 行 33951: 11-16 10:16:44.808 1858 2116 I LocationManagerService: handle report location accurate, 10231/com.fengyun.game.qp/4D1A8BE0 行 33952: 11-16 10:16:44.809 1858 2116 I 00400/HwQuickTTFFMonitor-V2018.8.27: isReportQuickTTFFLocation:true, pkgname=com.fengyun.game.qp 行 33953: 11-16 10:16:44.810 1858 2116 I LocationManagerService: key of receiver: 10231/com.fengyun.game.qp/4D1A8BE0 provider: gps permissionLevel:2 行 34004: 11-16 10:16:44.833 1858 2762 I LocationManagerService: finishOp, ops = 42, uid = 10231, packageName = com.fengyun.game.qp 行 34005: 11-16 10:16:44.833 1858 2762 I LocationManagerService: finishOp, ops = 41, uid = 10231, packageName = com.fengyun.game.qp 行 34006: 11-16 10:16:44.833 1858 2762 I LocationManagerService: stopping location attribution for 10231/com.fengyun.game.qp/4D1A8BE0 行 34008: 11-16 10:16:44.834 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34010: 11-16 10:16:44.834 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34011: 11-16 10:16:44.834 1858 2762 I LocationManagerService: remove 4D1A8BE0 gps Request[@+900ms HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}] 行 34014: 11-16 10:16:44.834 1858 2762 I 00400/HwQuickTTFFMonitor-V2018.8.27: removeHwQuickTTFF:com.fengyun.game.qp 行 34020: 11-16 10:16:44.835 1858 1905 I 00400/HwGnssLogServices: handlerStatistics:com.fengyun.game.qp, 0 行 34021: 11-16 10:16:44.835 1858 2762 I 00400/HwGpsPowerTracker: removeRequest: com.fengyun.game.qp 行 34033: 11-16 10:16:44.836 1858 2762 I 00400/HwLocationManagerService: delete locationRequestInfo=LocationRequestInfo[gps, gps, Request[@+900ms HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}], 10231/com.fengyun.game.qp/4D1A8BE0, 2, android.os.BinderProxy@f5ca7ac] 行 34033: 11-16 10:16:44.836 1858 2762 I 00400/HwLocationManagerService: delete locationRequestInfo=LocationRequestInfo[gps, gps, Request[@+900ms HIGH_ACCURACY, WorkSource{10231 com.fengyun.game.qp}], 10231/com.fengyun.game.qp/4D1A8BE0, 2, android.os.BinderProxy@f5ca7ac] 行 34164: 11-16 10:16:44.848 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34165: 11-16 10:16:44.848 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34166: 11-16 10:16:44.849 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34168: 11-16 10:16:44.849 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34209: 11-16 10:16:44.878 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34210: 11-16 10:16:44.878 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34211: 11-16 10:16:44.878 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34212: 11-16 10:16:44.878 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34213: 11-16 10:16:44.879 1858 2089 I 00202/HwWifiService: getFilterScanResults, uid = 10231, calling by com.fengyun.game.qp, isNeedApproximateLocation =false 行 34215: 11-16 10:16:44.887 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34216: 11-16 10:16:44.887 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34217: 11-16 10:16:44.887 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34218: 11-16 10:16:44.887 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34222: 11-16 10:16:44.892 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34223: 11-16 10:16:44.892 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34224: 11-16 10:16:44.894 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34225: 11-16 10:16:44.894 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34230: 11-16 10:16:44.919 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34231: 11-16 10:16:44.919 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34233: 11-16 10:16:44.919 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34234: 11-16 10:16:44.919 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34237: 11-16 10:16:44.953 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34238: 11-16 10:16:44.954 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34239: 11-16 10:16:44.954 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34240: 11-16 10:16:44.954 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34245: 11-16 10:16:44.962 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34246: 11-16 10:16:44.962 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34247: 11-16 10:16:44.962 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34248: 11-16 10:16:44.963 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34252: 11-16 10:16:44.967 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34253: 11-16 10:16:44.968 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 34254: 11-16 10:16:44.969 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 34255: 11-16 10:16:44.969 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 34298: 11-16 10:16:45.138 2390 26295 W ContentResolver: provider != null. Start to getTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 34299: 11-16 10:16:45.139 2390 26295 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 34302: 11-16 10:16:45.143 2390 26295 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: D:\吴潼\临时3\宋洁\hilogs\hiapplogcat-log.I001.20251116-101418\hiapplogcat-log.I002.20251116-101645 (219 命中) 行 4: 11-16 10:16:45.785 2390 26295 W ContentResolver: provider != null. Start to getTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 5: 11-16 10:16:45.785 2390 26295 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 8: 11-16 10:16:45.789 2390 26295 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 10: 11-16 10:16:45.796 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 12: 11-16 10:16:45.796 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 13: 11-16 10:16:45.796 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 14: 11-16 10:16:45.796 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 111: 11-16 10:16:46.007 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 112: 11-16 10:16:46.009 1858 2778 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 113: 11-16 10:16:46.012 2627 3531 I PG_ash : pkg null calling: com.fengyun.game.qp, pid: 0 ,type: acquire_provider 行 114: 11-16 10:16:46.015 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 117: 11-16 10:16:46.020 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 294: 11-16 10:16:46.486 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 295: 11-16 10:16:46.493 1858 7660 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 296: 11-16 10:16:46.495 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 299: 11-16 10:16:46.504 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 365: 11-16 10:16:46.724 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 367: 11-16 10:16:46.727 1858 7432 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 368: 11-16 10:16:46.729 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 377: 11-16 10:16:46.745 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 396: 11-16 10:16:46.795 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 397: 11-16 10:16:46.795 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 602: 11-16 10:16:47.713 1858 2090 W 00202/hw_netstat: total/50849/17825,com.fengyun.game.qp/50769/17681,com.huawei.hwid/80/144 行 607: 11-16 10:16:47.739 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 608: 11-16 10:16:47.742 1858 2778 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 609: 11-16 10:16:47.744 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 612: 11-16 10:16:47.749 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 848: 11-16 10:16:48.743 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 849: 11-16 10:16:48.747 1858 7432 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 850: 11-16 10:16:48.749 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 853: 11-16 10:16:48.758 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 910: 11-16 10:16:48.941 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 911: 11-16 10:16:48.941 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 1046: 11-16 10:16:49.707 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 1047: 11-16 10:16:49.709 1858 2778 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 1048: 11-16 10:16:49.711 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 1051: 11-16 10:16:49.716 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 1157: 11-16 10:16:50.002 1858 2778 I ActivityManager: makeIntentSenderCanceled: PendingIntentRecord{7d52b5e com.fengyun.game.qp startService}, caller: 26279 行 1181: 11-16 10:16:50.082 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onStartUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 1182: 11-16 10:16:50.083 1858 27350 I [SECURITY]: [HPS][DEFAULT][PermissionUsingMonitor]: onFinishUse, appInfo = 10231com.fengyun.game.qp, permGroupName = android.permission-group.LOCATION 行 1184: 11-16 10:16:50.083 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: 10231com.fengyun.game.qp addPermission android.permission-group.LOCATION 行 1185: 11-16 10:16:50.083 1858 27351 I [SECURITY]: [HPS][DEFAULT][AppNode]: com.fengyun.game.qp stop android.permission-group.LOCATION time is too short, so a delay is needed 行 1314: 11-16 10:16:50.657 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 1315: 11-16 10:16:50.659 1858 7432 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 1316: 11-16 10:16:50.660 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 1319: 11-16 10:16:50.665 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 1373: 11-16 10:16:50.829 1056 1317 I aptouch_daemon: Excute:86: cmd=TSA_ExecuteCommand, param=THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 1374: 11-16 10:16:50.829 1056 1317 I tpd_client: TSA_ExecuteCommand, THP_UpdateViewsLocation com.fengyun.game.qp#SCENE_GESTURE_SINGLE_TAP 行 1529: 11-16 10:16:51.632 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 1530: 11-16 10:16:51.635 1858 7660 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 1531: 11-16 10:16:51.637 2627 3531 I PG_ash : pkg null calling: com.fengyun.game.qp, pid: 0 ,type: acquire_provider 行 1532: 11-16 10:16:51.637 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 1536: 11-16 10:16:51.650 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 1745: 11-16 10:16:52.630 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 1746: 11-16 10:16:52.633 1858 7660 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 1747: 11-16 10:16:52.635 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 1750: 11-16 10:16:52.642 26315 26446 I XINGE : [TPush] get token from pkg:com.fengyun.game.qp, token: 行 1921: 11-16 10:16:53.679 26315 26446 W ContentResolver: provider == null. Start to getProviderMimeTypeAsync:content://com.fengyun.game.qp.AUTH_XGPUSH/token 行 1922: 11-16 10:16:53.682 1858 7432 I ContentProviderHelper: Successfully start provider ContentProviderRecord{481ec8b u0 com.fengyun.game.qp/com.tencent.android.tpush.XGPushProvider} launchingApp=null caller pid= 1858 行 1923: 11-16 10:16:53.685 2390 25801 I XINGE : [TPush] getType uri:content://com.fengyun.game.qp.AUTH_XGPUSH/token,match:50 行 1924: 11-16 10:16:53.685 16370 16637 E MediaProvider: Creating a non-default top level directory or deleting an existing one is not allowed! calling package: com.fengyun.game.qp, tencent
最新发布
11-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值