【问题标题】:Incorrect Stopping Application After Back Pressing后按后停止应用程序不正确
【发布时间】:2013-11-07 17:04:14
【问题描述】:

按下后退按钮后的日志:

11-07 22:48:08.376: D/AndroidRuntime(5325): 关闭 VM 11-07 22:48:08.376: W/dalvikvm(5325): threadid=1: 线程以未捕获的异常退出 (group=0x4162d700) 11-07 22:48:08.384:E/AndroidRuntime(5325):致命异常:主要 11-07 22:48:08.384: E/AndroidRuntime(5325): java.lang.RuntimeException: 无法销毁活动

{com.some.pack/com.some.packNY}: java.lang.NullPointerException 11-07 22:48:08.384: E/AndroidRuntime(5325):在 android.app.ActivityThread.performDestroyActivity

(ActivityThread.java:3627) 11-07 22:48:08.384: E/AndroidRuntime(5325): 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3645) 11-07 22:48:08.384: E/AndroidRuntime(5325): 在 android.app.ActivityThread.access$1200(ActivityThread.java:153) 11-07 22:48:08.384:E/AndroidRuntime(5325):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322) 11-07 22:48:08.384: E/AndroidRuntime(5325): 在 android.os.Handler.dispatchMessage(Handler.java:99) 11-07 22:48:08.384:E/AndroidRuntime(5325):在 android.os.Looper.loop(Looper.java:137) 11-07 22:48:08.384: E/AndroidRuntime(5325):在 android.app.ActivityThread.main(ActivityThread.java:5289) 11-07 22:48:08.384:E/AndroidRuntime(5325):在 java.lang.reflect.Method.invokeNative(Native Method) 11-07 22:48:08.384:E/AndroidRuntime(5325):在 java.lang.reflect.Method.invoke(Method.java:525) 11-07 22:48:08.384: E/AndroidRuntime(5325):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run

(ZygoteInit.java:739) 11-07 22:48:08.384: E/AndroidRuntime(5325): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 11-07 22:48:08.384:E/AndroidRuntime(5325):在 dalvik.system.NativeStart.main(本机方法)11-07 22:48:08.384: E/AndroidRuntime(5325):原因:java.lang.NullPointerException 11-07 22:48:08.384: E/AndroidRuntime(5325): 在 com.some.pack.NY.stop(NY.java:100) 11-07 22:48:08.384: E/AndroidRuntime(5325):在 com.some.pack.onDestroy(NY.java:106) 11-07 22:48:08.384:E/AndroidRuntime(5325):在 android.app.Activity.performDestroy(Activity.java:5302) 11-07 22:48:08.384:E/AndroidRuntime(5325):在 android.app.Instrumentation.callActivityOnDestroy

(Instrumentation.java:1117) 11-07 22:48:08.384: E/AndroidRuntime(5325):在 android.app.ActivityThread.performDestroyActivity

(ActivityThread.java:3614) 11-07 22:48:08.384: E/AndroidRuntime(5325): ... 11 更多 11-07 22:48:08.392: W/ActivityManager(408): Force 整理活动 com.some.pack/.MainActivity 11-07 22:48:09.079:W/ActivityManager(408):活动暂停超时 活动记录{41985990 u0

com.some.pack/.MainActivity} 11-07 22:48:09.095: W/Settings(4780):设置 bugreport_in_power_menu 已从 android.provider.Settings.Secure 到

android.provider.Settings.Global。 11-07 22:48:09.095: E/Cryptfs(124): 未运行加密,中止 11-07 22:48:09.923: I/Process(5325):发送信号。 PID: 5325 SIG: 9 11-07 22:48:09.946: W / InputDispatcher(408):通道'419e2ff0 com.some.pack/com.some.pack.MainActivity(服务器)'~消费者

关闭输入通道或发生错误。事件=0x9 11-07 22:48:09.946:E/InputDispatcher(408):通道'419e2ff0 com.some.pack/com.some.pack.MainActivity (server)' ~ 频道是

不可恢复的损坏将被丢弃!

【问题讨论】:

  • logcat 说什么?
  • 如果您发布堆栈跟踪会更容易查看
  • 如果你评论“stop();”会发生什么在 OnDestroy() 方法中?
  • 只有当mpmp2 存在并且已启动时,您才应该调用stop()

标签: android android-mediaplayer backpressure


【解决方案1】:

由于您没有发布日志,因此很难弄清楚,但您的实现中肯定存在巨大的差距,将以 NullPointerException 结束,您正在点击侦听器中初始化“mp”和“mp2” , 并在 onDestroy 中停止它们,但是您没有在方法“stop”中检查空值,如果您进入活动,这肯定会导致 NPE,并且不要按下播放按钮并将值分配给“mp和 mp2" 引用,然后当按回时,调用 onDestroy (调用停止),崩溃!因为 mp 和 mp2 为空...

希望对你有所帮助。

问候!

【讨论】:

    【解决方案2】:

    在 onPrepared() onStop() onDestroy() 和 onCompletin() 中添加一个简单的 if 条件:

      if(mp != null && mp2 != null){
        // Now You wont get runTime problems.
      }
    

    【讨论】:

    • public void onDestroy() { if(mp != null && mp2 != null){ stop(); } } 对吗?
    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多