在Android中正常关闭应用程序按下HOME或BACK时

时间:2013-04-02 13:19:56

标签: android forceclose

我有一个播放声音的Android应用程序,但是当我按HOME / BACK时我希望声音停止并关闭应用程序,当用户返回应用程序时,我想再次启动活动而不是恢复

我的onPause()代码:

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

当声音正在播放时,我点击了HOME或BACK我的应用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 个答案:

答案 0 :(得分:4)

尝试:

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

我猜测,当没有声音播放时,pS变量很可能为空,因此在使用时会得到一个NPE。

答案 1 :(得分:0)

在您完成()活动之前,无需等待活动生命周期中的onpause()

@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();
}
});