当我关闭应用程序时,出现一个对话框,提示“不幸的是,MyApp已停止。” 和一个确定按钮。通过关闭,我的意思是在第一个屏幕上按下“后退”按钮。该应用程序确实关闭正常,但几秒钟后出现此对话框。
我正在使用PhoneGap 3.2.0。在更新到3.xx之前,它并没有发生。我不确定这是什么原因之后的确切版本。
Eclipse中的LogCat会在发生这种情况时予以解决:
01-13 15:20:42.764: D/CordovaActivity(32367): onMessage(exit,null)
01-13 15:20:42.829: D/CordovaActivity(32367): Paused the application!
01-13 15:20:42.839: W/PluginManager(32367): THREAD WARNING: exec() call to App.exitApp blocked the main thread for 74ms. Plugin should use CordovaInterface.getThreadPool().
01-13 15:20:43.219: W/IInputConnectionWrapper(32367): showStatusIcon on inactive InputConnection
01-13 15:20:43.254: D/CordovaActivity(32367): CordovaActivity.onDestroy()
01-13 15:20:43.259: D/CordovaWebView(32367): >>> loadUrlNow()
01-13 15:20:43.284: D/AndroidRuntime(32367): Shutting down VM
01-13 15:20:43.284: W/dalvikvm(32367): threadid=1: thread exiting with uncaught exception (group=0x417752a0)
01-13 09:56:40.404: E/AndroidRuntime(13858): java.lang.RuntimeException: Unable to destroy activity {MyAppName}: java.lang.IllegalArgumentException: Receiver not registered: null
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3314)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3332)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.ActivityThread.access$1200(ActivityThread.java:140)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.os.Looper.loop(Looper.java:137)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.ActivityThread.main(ActivityThread.java:4898)
01-13 09:56:40.404: E/AndroidRuntime(13858): at java.lang.reflect.Method.invokeNative(Native Method)
01-13 09:56:40.404: E/AndroidRuntime(13858): at java.lang.reflect.Method.invoke(Method.java:511)
01-13 09:56:40.404: E/AndroidRuntime(13858): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
01-13 09:56:40.404: E/AndroidRuntime(13858): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
01-13 09:56:40.404: E/AndroidRuntime(13858): at dalvik.system.NativeStart.main(Native Method)
01-13 09:56:40.404: E/AndroidRuntime(13858): Caused by: java.lang.IllegalArgumentException: Receiver not registered: null
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:654)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1277)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:385)
01-13 09:56:40.404: E/AndroidRuntime(13858): at org.apache.cordova.device.Device.onDestroy(Device.java:98)
01-13 09:56:40.404: E/AndroidRuntime(13858): at org.apache.cordova.PluginManager.onDestroy(PluginManager.java:332)
01-13 09:56:40.404: E/AndroidRuntime(13858): at org.apache.cordova.CordovaWebView.handleDestroy(CordovaWebView.java:833)
01-13 09:56:40.404: E/AndroidRuntime(13858): at org.apache.cordova.CordovaActivity.onDestroy(CordovaActivity.java:774)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.Activity.performDestroy(Activity.java:5370)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1113)
01-13 09:56:40.404: E/AndroidRuntime(13858): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3301)
01-13 09:56:40.404: E/AndroidRuntime(13858): ... 11 more
有任何想法吗?
到目前为止,我一直在使用navigator.app.exitApp();行。如果在按下后退按钮时检测到我在index.html页面上,则关闭应用程序。
相反,我尝试删除后退按钮侦听器,并在按下后退按钮时恢复默认行为。它仍然导致相同的问题。
以下是一些简短的代码段:
$(document).ready(function ()
{
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady()
{
document.addEventListener("backbutton", backButton, false);
});
function backButton()
{
var currentLocation = window.location.href.substr(window.location.href.lastIndexOf("/")+1);
switch (currentLocation) {
case 'index.html':
navigator.app.exitApp();
break;
}
更新2014/01/13 16:00:不确定是否有帮助,但是我注意到,如果我从index.html中注释掉脚本src =“ cordova.js”,它不会给出任何错误。
在文件Device.java中,将其内容替换OnDestroy
为此
if( this.telephonyReceiver != null )
this.cordova.getActivity().unregisterReceiver(this.telephonyReceiver);
警告:这掩盖了原来的问题,即从我从Logcat获得的信息中,BroadcastReceiver没有正确注册。向suprnova之AndroidManifest.xml
类的人添加权限应该是可行的。
但是,如果您不需要知道电话的状态(例如,正在接听电话等),则需要快速修复。
警告2:下一个phonegap版本发布时,该版本可能会被覆盖。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句