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 events1 (ts=26.026702079, wall=14:40:51.361) 0,proximity-pa224: last 1 events1 (ts=1536.788061977, wall=15:05:57.782) 5.00, 18.00, 0.00,light-bh1745: last 1 events1 (ts=1541.706061977, wall=15:06:02.704) 429.00, 6881.00, 77.00,RPC sensor: last 1 events1 (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 events1 (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: 0Operating Mode: NORMALo.abv | WakeLockRefCount 0 | uid 10121 | cache size 0 | max cache size 0 step counter 0x00000011 | status: active | pending flush events 0
Connection Number: 1Operating Mode: NORMALcom.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: 2Operating Mode: NORMALcom.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: 3Operating Mode: NORMALcom.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: 4Operating Mode: NORMALcom.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: 5Operating Mode: NORMALcom.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: 6Operating Mode: NORMALcom.huawei.powergenie.core.contextaware.UserStateManager | WakeLockRefCount 0 | uid 1000 | cache size 0 | max cache size 0 step counter 0x00000011 | status: active | pending flush events 00 direct connectionsPrevious 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: 0Operating Mode: NORMALunknown_package_pid_9354 | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0accelerometer-lsm6dsm 0x00000000 | status: active | pending flush events 0gyroscope-lsm6dsm 0x00000005 | status: active | pending flush events 0gravity 0x00000006 | status: active | pending flush events 0linear Acceleration 0x00000007 | status: active | pending flush events 0rotation Vector 0x00000008 | status: active | pending flush events 0
Connection Number: 1Operating Mode: NORMALcom.unity3d.player.UnityPlayer | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0rotation Vector 0x00000008 | status: active | pending flush events 0
Connection Number: 2Operating Mode: NORMALunknown_package_pid_9354 | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0uncalibrated Gyroscope 0x0000000e | status: active | pending flush events 0
有accelerometer,gyroscope,gravity,linear acceleration,rotation Vector和uncalibrated Gyroscope,以uid来看10177下有三个连接,自己的包名设置不知道为什么这里显示unknow,另外还有一个unity自己的UnityPlayer。
当切换到后台后,就只有:
Connection Number: 0Operating Mode: NORMALcom.unity3d.player.UnityPlayer | WakeLockRefCount 0 | uid 10177 | cache size 0 | max cache size 0rotation Vector 0x00000008 | status: active | pending flush events 0
这个也就是前面结论说的Unity启用gyro后没释放的旋转矢量传感器占用,需要自己检测程序切到后台的时候停用。
Unity Google VR Cardboard 后台挂起时陀螺仪仍然占用问题解决相关推荐
- Google VR cardboard开发01
下载 google vr sdk Google VR · GitHub 或者直接打开 GitHub - googlevr/gvr-unity-sdk: Google VR SDK for Unity ...
- google vr学习资料整理
Google VR / Cardboard iOS Demo: 360 Tour https://github.com/GrahamLea/gvr-ios-360-tour ios 端这个好像能运行: ...
- 【Unity + Google Cardboard】 VR环境配置
翻译一下google cardboard接unity的开发文档 前面 一直想尝试开发一个VR游戏试试-- Unity的官方文档在这里 一开始看的时候分不清各种VR设备,如果你也是的话--比如只有一个能 ...
- unity+google cardboard
搞了三天各种问题,终于今天一早在手机上build成功了 贴一下googleVR的官网,能翻墙的可以看一下https://developers.google.com/vr/develop/unity/g ...
- 【VR开发】Unity开发VR时的基本设置
[背景]Unity对VR的支持个人感觉要由于虚幻引擎,但尽管如此,设置上还是需要花一番功夫研究.好在Unity推出了统一平台的VR集成插件,通过包含该插件的设置,通过Unity开发的VR游戏可以同时支 ...
- Google VR开发-Cardboard VR SDK头部追踪实现(罗德里格旋转公式)
一.罗德里格旋转公式 可以参考百度百科和维基百科进行了解. 概括来说就是罗德里格旋转公式就是用来求旋转后新向量的公式: 而这个公式可以转换成矩阵形式: 公式各部分的几何意义和推导原理参考下图 这个图证 ...
- 一、初识GVR ---- Android VR视频/Google VR for Android /VR Pano/VR Video
原文链接: http://blog.csdn.net/qq_24889075/article/details/52118633 http://www.jianshu.com/p/09c0822b9d1 ...
- Google VR技术大揭秘
VR 虚拟现实(Virtual Reality)技术是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的.交互式的三维动态视景和实体行为的系统仿真, 使用户 ...
- 浅谈Unity与VR产业,用Unity开发VR应用
VR(Virtual Reality的缩写,中文翻译-虚拟现实)概念早在80年代初就被提出来的,其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段. 中国VR产业仍在摸索阶段,亟缺复合型 ...
最新文章
- 示波器DIY参考设计
- iOS 利用RunTime检测控制器是否销毁
- python官网怎么下载安装-Python怎么下载安装
- 常考数据结构与算法:括号序列
- 苦口之药的拼音及解释
- window下搭建qt开发环境编译、引用ace
- Atitit 互联网行业如何提升收入 经济学概论读后感 attilax总结 1. 收入“四 位一体”的理论(工资、利润、利息、地租)	1 2. 提升收入,就要提升这4个象限的收入	1 3. 如
- 在Mac osx使用ADT Bundle踩过的坑
- 2000份简历模板 唯美时尚简约个人简历模板 英文简历模板 简历封面 自荐信下载
- php开发人脸识别的步骤,人脸识别的流程及主要技术
- Ingenuous Cubrency UVA - 11137(完全背包)
- 时创能源将于12月7日上会:拟募资11亿元,业绩增长迅猛
- 爬虫实战5:豆瓣读书爬取
- 《第31天:JQuery - 轮播图》
- 2017目标跟踪算法综述
- 怎么学习电脑板编程c语言,电脑编程c语言学习
- 浅淡元宇宙发展面临的难题
- @ConfigurationProperties报错问题
- hbase遇到元数据缺失,hbase:namespace加载错误,hbase启动不了
- Nginx使用ngx_http_realip模块获取用户真实IP实践