通话时Psensor有时不亮屏的问

来源:互联网 发布:身份证分期借款软件 编辑:程序博客网 时间:2024/06/03 16:00
         

1.当出现亮不起的时候,我们的传感器已经没有在工作(LED已经没在亮了)。

        2.从底层的log信息如下可以看到这是因为有系统调用过来关闭我们的设备,而非是我们的设备出现异常所致

                     

解决此问题:

 

  已经在原来你们在用的驱动加入了wake lock机制,也可以升级机器做测试,已经测试1个多小时没发现问题。加入的原因如下:

         3.从系统服务log对比差异处(下图有背色部分)

没有问题时的log:

出现问题时的log:

 

 

 

从上层代码 跟踪可以看到

这个区别是PowerManagerServer.java的 

 

 if (!updateWakefulnessLocked(dirtyPhase1))//条件不成立,造成此处的循环无法退出所致!

进入

 

    privatebooleanupdateWakefulnessLocked(intdirty){

        booleanchanged =false;

        if((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_BOOT_COMPLETED

                | DIRTY_WAKEFULNESS |DIRTY_STAY_ON | DIRTY_PROXIMITY_POSITIVE

                | DIRTY_DOCK_STATE | DIRTY_BOOT_IPO| DIRTY_SD_STATE)) !=0) {

            if(mWakefulness == WAKEFULNESS_AWAKE &&isItBedTimeYetLocked()) {

                if(DEBUG_SPEW){

                    Slog.d(TAG,"updateWakefulnessLocked: Bedtime...");//对应log,当能亮起时是没有此打印,说明没进入,而亮不起来时是有此打印的说明进入!

                }

                finallong time = SystemClock.uptimeMillis();

                if (shouldNapAtBedTimeLocked()){

                    changed = napNoUpdateLocked(time);

                }else{

                    changed = goToSleepNoUpdateLocked(time,

                           PowerManager.GO_TO_SLEEP_REASON_TIMEOUT);//打印 PowerManagerService: Going to sleep due to screen timeout...

                }

            }

        }

        returnchanged;

    }

从此接口可以看到 isItBedTimeYetLocked()接口为TRUE时会亮不起来!展开此接口:

可以看到

isBeingKeptAwakeLocked()为false时会造成上面为TRUE,展开

阅读此接口的说明,可以看到此接口会在系统没有wake lock时会返回FALSE

至于系统为什么没有wake lock,无法知悉!所以在驱动上加入此机制。