Unity Google VR Cardboard 后台挂起时陀螺仪仍然占用问题解决

为了节省时间,先说结论:

Unity集成的Google VR,cardboard应用切换到后台时,确实不会有陀螺仪占用不释放的问题。它能自动停止追踪,释放其占用的accelerometer,gyroscope,gravity,linear Acceleration和rotation Vector等几个传感器。

我遇到的这个问题是我代码上的问题,不是Unity或者Google VR的bug。我有一处使用:

Input.gyro.enabled = true;

该操作对陀螺仪进行注册,切换后台的时候会占用旋转矢量传感器不释放。所以我添加一些代码,程序失去焦点的时候则将其enabled置为false,解决了传感器占用问题:

09:11:14 - 0x00000008 pid=27589 uid=10176 package=com.unity3d.player.UnityPlayer
09:11:13 - 0x00000008 pid=27589 uid=10176 package=unknown_package_pid_27589
09:11:13 - 0x00000007 pid=27589 uid=10176 package=unknown_package_pid_27589

这里时间字符串后面的杠实际是事件的减号,也就是反注册。这样该陀螺仪就停止占用了0x00000008,也就是rotation vector传感器。

下面是具体经过,主要是自己没意识到Input的gyro启用后需要自己关闭,否则切换到后台仍然会占用。

如标题所示,最近这段时间,遇到了Cardboard应用后台挂起状态时陀螺仪仍然占用的问题,导致我们发布的app无法通过功耗测试。

具体地,Unity是2017.4.15f1版本,原生支持Google Cardboard,所以不导入Google vr unity sdk也能出cardboard包。Google vr unity sdk版本是1.190,出包运行在Mate 10上,操作系统为安卓8.1。

我对此也没有太多经验,感觉如果不用google vr unity sdk的资源,比如其封装的一些射线事件及预制体等,那么是完全不用导入的。unity打包出当apk中会自动含有cardboard支持,因为引擎集成了google vr,所以我认为导入的Google vr unity sdk可能不覆盖引擎集成的google vr。其导出的gradle项目中的代码,如pause时的操作,这些是引擎集成的时候就设置好的,这个观点我还不知道是不是正确。

补充(2019-05-15):后续开发测试中发现,导入sdk能修正渲染窗口不正确的问题,具体来说就是,我用了带刘海的华为P20Pro(分辨率2240*1080),使用2017.4.27f1(后来用了2018.3.13f1也一样,而2019.1.2f1则从刘海处渲染,导致下方屏幕留有空白)编译了一个空场景,那么运行的时候发现,两个相机渲染出来的窗口大小不一样,有一个相机画面下垂到屏幕外。如下:

导入最新的1.2的sdk后,两个渲染窗口则能正好平分屏幕。因此导入的sdk不仅是提供了一些脚本和预制体,也会对unity自身集成的gvr部分进行一些覆盖更新。那么也就是说,如果有新的屏幕比例或者设置等导致渲染不正确的问题,可以尝试导入更新的gvr。

补充部分到此结束,下面接着上面的问题记录。

比如完全不导入Google VR Unity sdk,那么直接编译一个空场景,启用cardboard支持,那么运行的时候,输出为:

02-23 10:30:45.682  1098  1098 I Unity   : onResume
02-23 10:30:45.694  1098  1098 I Unity   : resumeGvrLayout : VR State [ a=true, b=true, c=false, d=false, e=false, f=false, g=com.unity3d.player.GoogleVrProxy@b740cb2,]
02-23 10:30:45.699  1098  1098 I Unity   : setVrEnabled : VR State [ a=true, b=true, c=false, d=true, e=false, f=false, g=com.unity3d.player.GoogleVrProxy@b740cb2,]
02-23 10:30:45.700  1098  1098 I Unity   : Enable VR : VR State [ a=true, b=true, c=false, d=true, e=false, f=false, g=com.unity3d.player.GoogleVrProxy@b740cb2,]
02-23 10:30:45.713  1060  1831 V WindowManager: Relayout window turning screen on: Window{ea5e59 u0 com.huawei.generictest/com.unity3d.player.UnityPlayerActivity}
02-23 10:30:45.749  1098  1134 D Unity   : SetWindow 0 0xbe65c808
02-23 10:30:45.749  1098  1134 D Unity   : SetWindow 0 0xbe65c808
02-23 10:30:45.749  1098  1134 D Unity   : [EGL] Attaching window :0xbe65c808
02-23 10:30:45.750  1060  7817 D WindowManager: finishDrawingWindow: Window{ea5e59 u0 com.huawei.generictest/com.unity3d.player.UnityPlayerActivity} mDrawState=HAS_DRAWN
02-23 10:30:45.757  1098  1134 D Unity   : ANativeWindow: (2560/1440) RequestedResolution: (0/0) RenderingResolution: (0/0) EGLSurface: (2560/1440)
02-23 10:30:45.765  1098  1134 D Unity   : Sensor :        Accelerometer ( 1) ; 0.000010 / 0.00s ; accelerometer-lsm6dsm / st

这里好像看不到版本,也就是当前2017.4的Unity内集成的Google VR SDK版本不知道是什么。如果我新建一个工程,导入1.190版本的包,然后编译其demo场景HelloVR,运行时输出为:

02-23 10:37:47.092  2214  2214 I Unity   : onResume
02-23 10:37:47.096  2214  2214 I Unity   : resumeGvrLayout : VR State [ a=true, b=true, c=false, d=false, e=false, f=false, g=com.unity3d.player.GoogleVrProxy@8881867,]
02-23 10:37:47.097  2214  2214 I Unity   : setVrEnabled : VR State [ a=true, b=true, c=false, d=true, e=false, f=false, g=com.unity3d.player.GoogleVrProxy@8881867,]
02-23 10:37:47.097  2214  2214 I Unity   : Enable VR : VR State [ a=true, b=true, c=false, d=true, e=false, f=false, g=com.unity3d.player.GoogleVrProxy@8881867,]
02-23 10:37:47.104  1060  1782 V WindowManager: Relayout window turning screen on: Window{ba4b942 u0 com.huawei.vrmusic/com.unity3d.player.UnityPlayerActivity}
02-23 10:37:47.126  2214  2282 D Unity   : SetWindow 0 0xbe3f4008
02-23 10:37:47.126  1060  1782 D WindowManager: finishDrawingWindow: Window{ba4b942 u0 com.huawei.vrmusic/com.unity3d.player.UnityPlayerActivity} mDrawState=HAS_DRAWN
02-23 10:37:47.126  2214  2282 D Unity   : SetWindow 0 0xbe3f4008
02-23 10:37:47.126  2214  2282 D Unity   : [EGL] Attaching window :0xbe3f4008
02-23 10:37:47.129  2214  2282 D Unity   : ANativeWindow: (2560/1440) RequestedResolution: (0/0) RenderingResolution: (0/0) EGLSurface: (2560/1440)
02-23 10:37:47.135  2214  2282 D Unity   : Sensor :        Accelerometer ( 1) ; 0.000010 / 0.00s ; accelerometer-lsm6dsm / st

同样还是com.unity3d.player.GoogleVrProxy,从日志输出看好像导入新的sdk包并不会使引擎集成的GVR有变化。

下面就针对陀螺仪占用问题进行分析了,命令如下:

adb shell dumpsys sensorservice

这个是查看传感器的命令,输出如下(有编辑):

第一部分:

Sensor Device:
Total 22 h/w sensors, 22 running:
0x00000003) active-count = 2; sampling_period(ms) = {300.0, 300.0}, selected = 300.00 ms; batching_period(ms) = {0.0, 0.0}, selected = 0.00 ms
0x00000004) active-count = 1; sampling_period(ms) = {200.0},        selected = 200.00 ms; batching_period(ms) = {0.0},      selected = 0.00 ms
0x0000000b) active-count = 1; sampling_period(ms) = {1.0},          selected = 1.00 ms;   batching_period(ms) = {0.0},      selected = 0.00 ms
0x00000011) active-count = 2; sampling_period(ms) = {1.0, 200.0},   selected = 1.00 ms;   batching_period(ms) = {0.0, 0.0}, selected = 0.00 ms
0x00000018) active-count = 1; sampling_period(ms) = {500.0},        selected = 500.00 ms; batching_period(ms) = {0.0},      selected = 0.00 ms

22个传感器都在运行,激活的用active-count给出个数,可以对比下面的传感器ID对比哪些传感器在使用。

第二部分:

Sensor List:
0000000000) accelerometer-lsm6dsm         | st                       | ver: 1    | type: android.sensor.accelerometer(1)                | perm: n/a | flags: 0x00000000 continuous      | minRate=5.00Hz  | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x00000001) mag-yas537                    | yamaha                   | ver: 1001 | type: android.sensor.magnetic_field(2)               | perm: n/a | flags: 0x00000000 continuous      | minRate=5.00Hz  | maxRate=100.00Hz | no batching                             | non-wakeUp |
0x00000002) orientation                   | huawei                   | ver: 1    | type: android.sensor.orientation(3)                  | perm: n/a | flags: 0x00000000 continuous      | minRate=50.00Hz | maxRate=100.00Hz | no batching                             | non-wakeUp |
0x00000003) light-bh1745                  | rohm                     | ver: 1    | type: android.sensor.light(5)                        | perm: n/a | flags: 0x00000002 on-change       | maxDelay=0us    | minDelay=0us     | no batching                             | non-wakeUp |
0x00000004) proximity-pa224               | txc                      | ver: 1    | type: android.sensor.proximity(8)                    | perm: n/a | flags: 0x00000003 on-change       | minRate=5.00Hz  | minDelay=0us     | FIFO (max,reserved) = (100, 100) events | wakeUp     |
0x00000005) gyroscope-lsm6dsm             | st                       | ver: 1    | type: android.sensor.gyroscope(4)                    | perm: n/a | flags: 0x00000000 continuous      | minRate=5.00Hz  | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x00000006) gravity                       | huawei                   | ver: 1    | type: android.sensor.gravity(9)                      | perm: n/a | flags: 0x00000000 continuous      | minRate=50.00Hz | maxRate=100.00Hz | no batching                             | non-wakeUp |
0x00000007) linear Acceleration           | huawei                   | ver: 1    | type: android.sensor.linear_acceleration(10)         | perm: n/a | flags: 0x00000000 continuous      | minRate=50.00Hz | maxRate=100.00Hz | no batching                             | non-wakeUp |
0x00000008) rotation Vector               | huawei                   | ver: 1    | type: android.sensor.rotation_vector(11)             | perm: n/a | flags: 0x00000000 continuous      | minRate=50.00Hz | maxRate=100.00Hz | no batching                             | non-wakeUp |
0x00000009) airpress-lps22bh              | st                       | ver: 1    | type: android.sensor.pressure(6)                     | perm: n/a | flags: 0x00000000 continuous      | minRate=1.00Hz  | maxRate=10.00Hz  | FIFO (max,reserved) = (300, 300) events | non-wakeUp |
0x0000000b) HALL sensor                   | huawei                   | ver: 1    | type: android.sensor.hall(65538)                     | perm: n/a | flags: 0x00000002 on-change       | maxDelay=0us    | minDelay=0us     | no batching                             | non-wakeUp |
0x0000000c) uncalibrated Magnetic Field   | Asahi Kasei Microdevices | ver: 1    | type: android.sensor.magnetic_field_uncalibrated(14) | perm: n/a | flags: 0x00000000 continuous      | minRate=5.00Hz  | maxRate=60.00Hz  | no batching                             | non-wakeUp |
0x0000000d) game Rotation Vector          | huawei                   | ver: 1    | type: android.sensor.game_rotation_vector(15)        | perm: n/a | flags: 0x00000000 continuous      | minRate=50.00Hz | maxRate=100.00Hz | no batching                             | non-wakeUp |
0x0000000e) uncalibrated Gyroscope        | STMicroelectronics       | ver: 1    | type: android.sensor.gyroscope_uncalibrated(16)      | perm: n/a | flags: 0x00000000 continuous      | minRate=5.00Hz  | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x0000000f) significant Motion            | huawei                   | ver: 1    | type: android.sensor.significant_motion(17)          | perm: n/a | flags: 0x00000005 one-shot        | maxDelay=0us    | minDelay=-1us    | no batching                             | wakeUp     |
0x00000010) step Detector                 | huawei                   | ver: 1    | type: android.sensor.step_detector(18)               | perm: n/a | flags: 0x00000006 special-trigger | maxDelay=0us    | minDelay=0us     | FIFO (max,reserved) = (100, 100) events | non-wakeUp |
0x00000011) step counter                  | huawei                   | ver: 1    | type: android.sensor.step_counter(19)                | perm: n/a | flags: 0x00000002 on-change       | maxDelay=0us    | minDelay=0us     | no batching                             | non-wakeUp |
0x00000012) geomagnetic Rotation Vector   | huawei                   | ver: 1    | type: android.sensor.geomagnetic_rotation_vector(20) | perm: n/a | flags: 0x00000000 continuous      | minRate=5.00Hz  | maxRate=100.00Hz | no batching                             | non-wakeUp |
0x00000015) phonecall sensor              | huawei                   | ver: 1    | type: android.sensor.gesture(65544)                  | perm: n/a | flags: 0x00000003 on-change       | minRate=2.00Hz  | maxRate=100.00Hz | no batching                             | wakeUp     |
0x00000016) mag bracket                   | huawei, virtual          | ver: 1    | type: android.sensor.magn_bracket(65545)             | perm: n/a | flags: 0x00000003 on-change       | minRate=2.00Hz  | maxRate=100.00Hz | no batching                             | wakeUp     |
0x00000018) RPC sensor                    | huawei                   | ver: 1    | type: android.sensor.rpc(65552)                      | perm: n/a | flags: 0x00000002 on-change       | minRate=1.00Hz  | maxRate=2.00Hz   | no batching                             | non-wakeUp |
0x00000019) agt                           | huawei                   | ver: 1    | type: android.sensor.agt(65553)                      | perm: n/a | flags: 0x00000000 continuous      | minRate=5.00Hz  | maxRate=20.00Hz  | no batching                             | non-wakeUp |
0x5f636779) Corrected Gyroscope Sensor    | AOSP                     | ver: 1    | type: android.sensor.gyroscope(4)                    | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x5f676172) Game Rotation Vector Sensor   | AOSP                     | ver: 3    | type: android.sensor.game_rotation_vector(15)        | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x5f676273) Gyroscope Bias (debug)        | AOSP                     | ver: 1    | type: android.sensor.accelerometer(1)                | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x5f67656f) GeoMag Rotation Vector Sensor | AOSP                     | ver: 3    | type: android.sensor.geomagnetic_rotation_vector(20) | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x5f677276) Gravity Sensor                | AOSP                     | ver: 3    | type: android.sensor.gravity(9)                      | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x5f6c696e) Linear Acceleration Sensor    | AOSP                     | ver: 3    | type: android.sensor.linear_acceleration(10)         | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x5f726f76) Rotation Vector Sensor        | AOSP                     | ver: 3    | type: android.sensor.rotation_vector(11)             | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |
0x5f797072) Orientation Sensor            | AOSP                     | ver: 1    | type: android.sensor.orientation(3)                  | perm: n/a | flags: 0x00000000 continuous      | maxDelay=0us    | maxRate=500.00Hz | no batching                             | non-wakeUp |

这里传感器列表有30个,有accelerometer加速度传感器,magnetic_field磁力传感器,light光传感器,proximity距离传感器,gyroscope陀螺仪传感器,gravity重力传感器,linear_acceleration线性加速度传感器,rotation_vector旋转矢量传感器,pressure压力传感器,hall霍尔传感器,magnetic_field_uncalibrated是未校准的磁力传感器,后面的我感觉我还是不查了,正事要紧。

第三部分:

Fusion States:
9-axis fusion           disabled (0 clients), gyro-rate= 200.00Hz, q=< 0, 0, 0, 0 > (0), b=< 0, 0, 0 >
game   fusion(no mag)   disabled (0 clients), gyro-rate= 200.00Hz, q=< 0, 0, 0, 0 > (0), b=< 0, 0, 0 >
geomag fusion (no gyro) disabled (0 clients), gyro-rate= 200.00Hz, q=< 0, 0, 0, 0 > (0), b=< 0, 0, 0 >

Recent Sensor events:
step counter: last 1 events
         1 (ts=26.026702079, wall=14:40:51.361) 0,

proximity-pa224: last 1 events
         1 (ts=1536.788061977, wall=15:05:57.782) 5.00, 18.00, 0.00,

light-bh1745: last 1 events
         1 (ts=1541.706061977, wall=15:06:02.704) 429.00, 6881.00, 77.00,

RPC sensor: last 1 events
         1 (ts=0.000000001, wall=14:40:56.921) 0.00, 4.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,

HALL sensor: last 1 events
         1 (ts=25.936067183, wall=14:40:51.270) 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,

Active sensors:
light-bh1745    (handle=0x00000003, connections=2)
proximity-pa224 (handle=0x00000004, connections=1)
HALL sensor     (handle=0x0000000b, connections=1)
step counter    (handle=0x00000011, connections=2)
RPC sensor      (handle=0x00000018, connections=1)

Socket Buffer size = 984 events
WakeLock Status: not held
Mode : NORMAL

第四部分:

7 active connections
Connection Number: 0
        Operating Mode: NORMAL
         o.abv                                                                | WakeLockRefCount 0 | uid 10121 | cache size 0 | max cache size 0 step counter    0x00000011 | status: active | pending flush events 0
Connection Number: 1
        Operating Mode: NORMAL
         com.android.server.display.AutomaticBrightnessController             | WakeLockRefCount 0 | uid 1000  | cache size 0 | max cache size 0 light-bh1745    0x00000003 | status: active | pending flush events 0
Connection Number: 2
        Operating Mode: NORMAL
         com.android.server.display.HwNormalizedAutomaticBrightnessController | WakeLockRefCount 0 | uid 1000  | cache size 0 | max cache size 0 proximity-pa224 0x00000004 | status: active | pending flush events 0
Connection Number: 3
        Operating Mode: NORMAL
         com.huawei.systemserver.sarcontrolservice.SarControlManager          | WakeLockRefCount 0 | uid 1000  | cache size 0 | max cache size 0 RPC sensor      0x00000018 | status: active | pending flush events 0
Connection Number: 4
        Operating Mode: NORMAL
         com.android.server.display.HwLightSensorController                   | WakeLockRefCount 0 | uid 1000  | cache size 0 | max cache size 0 light-bh1745    0x00000003 | status: active | pending flush events 0
Connection Number: 5
        Operating Mode: NORMAL
         com.huawei.systemserver.cover.CoverManagerService                    | WakeLockRefCount 0 | uid 1000  | cache size 0 | max cache size 0 HALL sensor     0x0000000b | status: active | pending flush events 0
Connection Number: 6
        Operating Mode: NORMAL
         com.huawei.powergenie.core.contextaware.UserStateManager             | WakeLockRefCount 0 | uid 1000  | cache size 0 | max cache size 0 step counter    0x00000011 | status: active | pending flush events 0

0 direct connections

Previous Registrations:
15:05:58 - 0x00000004 pid= 1583 uid=10029 package=huawei.com.android.server.policy.HwScreenOnProximityLock
15:05:58 - 0x00000004 pid= 1583 uid=10029 package=com.android.systemui.classifier.FalsingManager
15:05:57 + 0x00000004 pid= 1583 uid=10029 package=com.android.systemui.classifier.FalsingManager samplingPeriod=20000us batchingPeriod=0us
15:05:57 + 0x00000004 pid= 1060 uid= 1000 package=com.android.server.display.HwNormalizedAutomaticBrightnessController samplingPeriod=200000us batchingPeriod=0us
15:05:57 + 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.AutomaticBrightnessController samplingPeriod=300000us batchingPeriod=0us
15:05:57 + 0x00000004 pid= 1060 uid= 1000 package=huawei.com.android.server.policy.HwScreenOnProximityLock samplingPeriod=200000us batchingPeriod=0us
15:05:57 + 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.HwLightSensorController samplingPeriod=300000us batchingPeriod=0us
14:47:33 - 0x00000004 pid= 1060 uid= 1000 package=com.android.server.display.HwNormalizedAutomaticBrightnessController
14:47:33 - 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.AutomaticBrightnessController
14:47:32 - 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.HwLightSensorController
14:42:18 - 0x00000003 pid= 1680 uid= 1000 package=com.huawei.bd.collector.BDCollector
14:42:18 + 0x00000003 pid= 1680 uid= 1000 package=com.huawei.bd.collector.BDCollector samplingPeriod=1000000us batchingPeriod=0us
14:42:04 - 0x00000004 pid= 1583 uid=10029 package=huawei.com.android.server.policy.HwScreenOnProximityLock
14:42:04 - 0x00000004 pid= 1583 uid=10029 package=com.android.systemui.classifier.FalsingManager
14:42:03 + 0x00000004 pid= 1583 uid=10029 package=com.android.systemui.classifier.FalsingManager samplingPeriod=20000us batchingPeriod=0us
14:42:03 + 0x00000004 pid= 1060 uid= 1000 package=com.android.server.display.HwNormalizedAutomaticBrightnessController samplingPeriod=200000us batchingPeriod=0us
14:42:03 + 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.AutomaticBrightnessController samplingPeriod=300000us batchingPeriod=0us
14:42:03 + 0x00000004 pid= 1060 uid= 1000 package=huawei.com.android.server.policy.HwScreenOnProximityLock samplingPeriod=200000us batchingPeriod=0us
14:42:03 + 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.HwLightSensorController samplingPeriod=300000us batchingPeriod=0us
14:41:08 + 0x00000011 pid= 2813 uid=10121 package=o.abv samplingPeriod=0us batchingPeriod=0us
14:41:02 - 0x00000004 pid= 1060 uid= 1000 package=com.android.server.display.HwNormalizedAutomaticBrightnessController
14:41:02 - 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.AutomaticBrightnessController
14:41:02 - 0x00000004 pid= 1583 uid=10029 package=com.android.systemui.classifier.FalsingManager
14:41:02 - 0x00000004 pid= 1060 uid= 1000 package=huawei.com.android.server.policy.HwScreenOnProximityLock
14:41:02 - 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.HwLightSensorController
14:40:55 + 0x00000018 pid= 1712 uid= 1000 package=com.huawei.systemserver.sarcontrolservice.SarControlManager samplingPeriod=500000us batchingPeriod=0us
14:40:51 + 0x00000004 pid= 1583 uid=10029 package=com.android.systemui.classifier.FalsingManager samplingPeriod=20000us batchingPeriod=0us
14:40:51 + 0x00000011 pid= 1729 uid= 1000 package=com.huawei.powergenie.core.contextaware.UserStateManager samplingPeriod=200000us batchingPeriod=0us
14:40:51 + 0x0000000b pid= 1712 uid= 1000 package=com.huawei.systemserver.cover.CoverManagerService samplingPeriod=0us batchingPeriod=0us
14:40:49 + 0x00000004 pid= 1060 uid= 1000 package=com.android.server.display.HwNormalizedAutomaticBrightnessController samplingPeriod=200000us batchingPeriod=0us
14:40:49 + 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.AutomaticBrightnessController samplingPeriod=300000us batchingPeriod=0us
14:40:49 + 0x00000004 pid= 1060 uid= 1000 package=huawei.com.android.server.policy.HwScreenOnProximityLock samplingPeriod=200000us batchingPeriod=0us
14:40:49 + 0x00000003 pid= 1060 uid= 1000 package=com.android.server.display.HwLightSensorController samplingPeriod=300000us batchingPeriod=0us

这里应该是主要的,比如这里有7个活跃连接,且给出了uid,uid是和pid不一样的,根据uid可以获取pid得到包名,实际上可以通过最后一部分pid和uid和package直接就对应起来,就不用再去查找了。如果给出了pid后package未正确给出而是unknown,可以用:

adb shell ps|grep 1080

查看该pid如1080对应的信息,比如我的cardboard应用,显示:

16:08:34 + 0x0000000e pid= 9354 uid=10177 package=unknown_package_pid_9354 samplingPeriod=200000us batchingPeriod=0us

9354就是pid,根据connections看到它占用的传感器:

Connection Number: 0
        Operating Mode: NORMAL
         unknown_package_pid_9354 | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0
         accelerometer-lsm6dsm 0x00000000 | status: active | pending flush events 0
         gyroscope-lsm6dsm 0x00000005 | status: active | pending flush events 0
         gravity 0x00000006 | status: active | pending flush events 0
         linear Acceleration 0x00000007 | status: active | pending flush events 0
         rotation Vector 0x00000008 | status: active | pending flush events 0
Connection Number: 1
        Operating Mode: NORMAL
         com.unity3d.player.UnityPlayer | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0
         rotation Vector 0x00000008 | status: active | pending flush events 0
Connection Number: 2
        Operating Mode: NORMAL
         unknown_package_pid_9354 | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0
         uncalibrated Gyroscope 0x0000000e | status: active | pending flush events 0

有accelerometer,gyroscope,gravity,linear acceleration,rotation Vector和uncalibrated Gyroscope,以uid来看10177下有三个连接,自己的包名设置不知道为什么这里显示unknow,另外还有一个unity自己的UnityPlayer。

当切换到后台后,就只有:

Connection Number: 0
        Operating Mode: NORMAL
         com.unity3d.player.UnityPlayer | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0
         rotation Vector 0x00000008 | status: active | pending flush events 0

这个也就是前面结论说的Unity启用gyro后没释放的旋转矢量传感器占用,需要自己检测程序切到后台的时候停用。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值