代码之家  ›  专栏  ›  技术社区  ›  Si8

按下“主页”或“返回”时,在Android中优雅地关闭应用程序

  •  -3
  • Si8  · 技术社区  · 11 年前

    我有一个android应用程序,可以播放声音,但当我按HOME/BACK时,我希望声音停止并关闭应用程序,当用户返回应用程序时,我想再次启动活动,而不是继续。

    我的onPause()代码:

    @Override
    protected void onPause()
    {
        super.onPause();
        if (pS.isPlaying()) {
            pS.pause(); //stop the sound
            finish();
        }
        else
            finish();
    }
    

    当声音播放时,我点击主页或返回我的应用程序FC,并在下面发布日志:

    04-02 13:06:40.563: E/AndroidRuntime(925): FATAL EXCEPTION: main
    04-02 13:06:40.563: E/AndroidRuntime(925): java.lang.RuntimeException: Unable to pause activity {com.testcom.myapp/com.testcom.myapp.MyappActivity}: java.lang.NullPointerException
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2354)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2311)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2291)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.access$1700(ActivityThread.java:117)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:938)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.os.Handler.dispatchMessage(Handler.java:99)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.os.Looper.loop(Looper.java:123)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.main(ActivityThread.java:3683)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at java.lang.reflect.Method.invokeNative(Native Method)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at java.lang.reflect.Method.invoke(Method.java:507)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at dalvik.system.NativeStart.main(Native Method)
    04-02 13:06:40.563: E/AndroidRuntime(925): Caused by: java.lang.NullPointerException
    04-02 13:06:40.563: E/AndroidRuntime(925):  at com.testcom.myapp.MyappActivity.onPause(MyappActivity.java:119)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.Activity.performPause(Activity.java:3851)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1191)
    04-02 13:06:40.563: E/AndroidRuntime(925):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2341)
    04-02 13:06:40.563: E/AndroidRuntime(925):  ... 12 more
    

    笔记 :如果正在播放声音并按下HOME/BACK(主页/后退),应用程序会很好地关闭,但如果在按下HOME/BACK(主页/返回)时没有声音播放应用程序FC。我该如何解决问题?

    2 回复  |  直到 11 年前
        1
  •  4
  •   Raghav Sood    11 年前

    尝试:

    @Override
    protected void onPause()
    {
        super.onPause();
        if (pS!= null && pS.isPlaying()) {
            pS.pause(); //stop the sound
            finish();
        }
        else
            finish();
    }
    

    我猜很可能在没有声音的情况下 pS 变量为null,因此在使用它时会得到一个NPE。

        2
  •  0
  •   Viswanath Lekshmanan    11 年前

    没有必要在活动生命周期中等待onpause(),然后tat u才能完成活动()

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {     
    
    if(keyCode == KeyEvent.KEYCODE_HOME||keyCode == KeyEvent.KEYCODE_BACK)
    {
        if (ps!=null) {
        pS.pause(); //stop the sound
        finish();
    }
    else
      finish();
    }
    });