美文网首页
String.equals()的使用异常

String.equals()的使用异常

作者: 秋云_3b22 | 来源:发表于2019-03-21 10:08 被阅读0次

            最近感触最深的就是我需要赶紧提升,个人工作能力,写作能力,股票分析能力,逆向思维模式等等。为什么有这种想法,一、对自己有了更高的期盼,二、对自己现在的状况不满意。做为一个闷骚型IT男,业余活动太小,周末都少有出门,接触外面的世界太少,不会待人,生活常识也少的可伶。发一下牢骚,今天开始写作,不管是对生活的感悟还是对事情的个人看法,当然也不能少了软件bug,希望能坚持把生活的一些经历记录下来。

            言归正传,这是关于framework中遇到的bug记录,项目需求,要添加一个实体reset按键,底层驱动容易实现,只要修改一下dtsi,上报一个键值即可,看硬件reset按键和power键一样是连接在pmic上的,并不是连在CPU上,所以我们只要修改pmic的dtsi就可以,如下:


    按键配置

    pon_1是power键, pon_2是reset键。下一步我们配framework的KEYCODE。在Generic.kl 中添加key  356  REBOOT。PhoneWindowManager.java中interceptKeyBeforeQueueing()函数添加KEYCODE_REBOOT的拦截: 

         case KeyEvent.KEYCODE_REBOOT: { //add a power reset key by maoyuanqiu

              mPowerManager.reboot("reboot");

                    break;    } 

    但是这样修改后,按下reset按键走的是虽然重启了但是弹出的关机的界面。因此我在shutdownThread增加了一个重启的提示框beginShutdownSequence()函数添加了:

                else if( mReason.equals("reboot")){

                pd.setTitle(context.getText(com.android.internal.R.string.power_reboot));

                pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));

                pd.setIndeterminate(true);

    这样就可以了吗?代码没有问题了?


    这样的修改经不起测试,按reset键没有暴露问题,但是当batteryService或者其他应用发送ACTION_REQUEST_SHUTDOWN广播时,系统会出现异常,系统重启到一半卡住不动。

    01-01 03:06:51.960 E/AndroidRuntime( 3815): *** FATAL EXCEPTION IN SYSTEM PROCESS: PowerManagerService

    01-01 03:06:51.960 E/AndroidRuntime( 3815): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at com.android.server.power.ShutdownThread.beginShutdownSequence(ShutdownThread.java:318)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at com.android.server.power.ShutdownThread.shutdownInner(ShutdownThread.java:198)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at com.android.server.power.ShutdownThread.shutdown(ShutdownThread.java:139)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at com.android.server.power.PowerManagerService$4.run(PowerManagerService.java:2524)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at android.os.Handler.handleCallback(Handler.java:751)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at android.os.Handler.dispatchMessage(Handler.java:95)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at android.os.Looper.loop(Looper.java:154)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at android.os.HandlerThread.run(HandlerThread.java:61)

    01-01 03:06:51.960 E/AndroidRuntime( 3815): at com.android.server.ServiceThread.run(ServiceThread.java:46)

    log中很明确的说明com.android.server.power.ShutdownThread.beginShutdownSequence(ShutdownThread.java:318)  ShutdownThread.java:318 有问题,这里是我添加reset提示框的地方。即:else if( mReason.equals("reboot")){  有问题。为什么?String 类型的mReason没有自检,因此这里只需要修改为:if(mReason != null && mReason.equals("reboot"))。

    相关文章

      网友评论

          本文标题:String.equals()的使用异常

          本文链接:https://www.haomeiwen.com/subject/hlufvqtx.html