美文网首页
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()的使用异常

    最近感触最深的就是我需要赶紧提升,个人工作能力,写作能力,股票分析能力,逆向思维模式等等。为什么有这种想法,一、对...

  • 第十章异常

    目录 仅在发生异常的条件下使用异常 对可恢复条件使用已检查异常,对编程错误使用运行时异常 避免不必要地使用检查异常...

  • 异常的使用

    一、异常的完整写法 二、异常的使用:计算器

  • JAVA面试50讲之1:Exception底层原理是什么?

    目录 异常的概念 异常的使用 异常的原理 Error与Exception的区别 使用建议 一、异常的概念 java...

  • 异常使用

    异常 广义上的错误分为错误和异常 错误指的是可以认为避免 异常是指在语法逻辑正确的前提下出现的问题 异常处理 不能...

  • 你的c++团队还在禁用异常处理吗?

    关于c++的异常处理,网上有很多的争议,本文会介绍c++的异常处理的使用,以及我们应该使用异常处理吗,以及使用异常...

  • Effective Java 随笔(异常)

    异常第57条:只针对异常的情况使用异常Java程序设计的时候,只针对有异常的情况,才考了使用异常。实际上,基于异常...

  • Flutter/Dart - 异常处理

    异常处理 dart 使用经典的try-catch处理异常,使用关键字throw抛出一个异常。 抛出异常 首先,看看...

  • 第7章 异常处理

    7.1 程序的异常处理 7.1.1 异常处理的基本使用 7.1.2 异常处理的高级使用 7.2 断言 断言 ass...

  • Effective Java之异常

    #只针对不正常的条件使用异常 #对于可恢复的条件使用被检查的异常,对于程序错误使用运行时异常 #避免不必要地使用被...

网友评论

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

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