Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当按下HOME或BACK时,在Android中优雅地关闭应用程序_Android_Forceclose - Fatal编程技术网

当按下HOME或BACK时,在Android中优雅地关闭应用程序

当按下HOME或BACK时,在Android中优雅地关闭应用程序,android,forceclose,Android,Forceclose,我有一个android应用程序可以播放声音,但当我按HOME/BACK时,我希望声音停止并关闭应用程序,当用户返回应用程序时,我希望再次启动活动,而不是继续 我的onPause()代码: 当声音播放时,我点击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.

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

我的onPause()代码:

当声音播放时,我点击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。如何解决此问题?

请尝试:

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

我猜最有可能的情况是,当没有声音播放时,您的
pS
变量为空,因此您在使用它时会得到一个NPE。

无需在活动生命周期中等待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();
}
});

哇!不知道为什么我没有意识到pS!=无效的但是你的代码工作起来很有魅力!谢谢拉格哈!我可以加上这个和暂停吗?或者onPause会处理你在这里发布的内容吗?谢谢。不,有一个重写的onkeyDown方法,请尝试右键单击->源->重写/实现方法->选择onkeyDown(),当您按home或back按钮时,将自动调用该方法。是否在我的主类中同时使用这两个重写?因此,去掉onPause并添加代码?我不清楚。sorryHOME不能被覆盖,它无法捕捉home按钮
@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();
}
});