Android是强制杀死我的启动BT连接

我已经用Apache cordova为Android写了一个启动器应用程序。 这是一个类似自助亭的应用程序,基本上它工作正常。

不幸的是有一个问题:在某些情况下Android是强制杀死我的应用程序,并立即重新启动它。 – 加载大概需要3秒钟,在那里显示一个白色的屏幕。 它开始全新(onPause,onResume不被调用)。 在日志中我发现:

V/WindowManager( 657): Changing focus from Window{42544288 u0 com.android.settings/com.android.settings.SubSettings} to Window{428ad610 u0 com.android.settings/com.android.settings.SubSettings} Callers=com.android.server.wm.WindowManagerService.addWindow:2665 com.android.server.wm.Session.addToDisplay:163 android.view.IWindowSession$Stub.onTransact:111 com.android.server.wm.Session.onTransact:126 I/WindowManager( 657): Gaining focus: Window{428ad610 u0 com.android.settings/com.android.settings.SubSettings} ... I/ActivityManager( 657): Force stopping com.myapp.name appid=10119 user=0: clear data I/ActivityManager( 657): Killing 2639:com.myapp.name/u0a119 (adj 7): stop com.myapp.name I/ActivityManager( 657): Force finishing activity ActivityRecord{42542218 u0 com.myapp.name/.MainActivity t2} V/ActivityManager( 657): Broadcast: Intent { act=android.intent.action.PACKAGE_RESTARTED dat=package:com.myapp.name flg=0x10 (has extras) } ordered=false userid=0 callerApp=null V/ActivityManager( 657): Broadcast: Intent { act=android.intent.action.PACKAGE_DATA_CLEARED dat=package:com.myapp.name flg=0x10 (has extras) } ordered=false userid=0 callerApp=null I/NotificationService( 657): queryReplace=false I/ActivityManager( 657): Start proc com.android.documentsui for broadcast com.android.documentsui/.PackageReceiver: pid=2740 uid=10036 gids={50036} V/WindowManager( 657): Changing focus from Window{428ad610 u0 com.android.settings/com.android.settings.SubSettings EXITING} to Window{42544288 u0 com.android.settings/com.android.settings.SubSettings} Callers=com.android.server.wm.WindowManagerService.removeWindowLocked:2770 com.android.server.wm.WindowManagerService.removeWindow:2709 com.android.server.wm.Session.remove:182 android.view.IWindowSession$Stub.onTransact:197 ... I/WindowManager( 657): Gaining focus: Window{42544288 u0 com.android.settings/com.android.settings.SubSettings} I/WindowManager( 657): Losing focus: Window{428ad610 u0 com.android.settings/com.android.settings.SubSettings EXITING} D/DisplayManagerService( 657): Display listener for pid 2639 died. D/WifiService( 657): Client connection lost with reason: 4 I/WindowState( 657): WIN DEATH: Window{424b0f20 u0 com.myapp.name/com.myapp.name.MainActivity} W/WindowManager( 657): Force-removing child win Window{424c4168 u0 SurfaceView} from container Window{424b0f20 u0 com.myapp.name/com.myapp.name.MainActivity} W/WindowManager( 657): Failed looking up window W/WindowManager( 657): java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@427d8618 does not exist W/WindowManager( 657): at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:8571) W/WindowManager( 657): at com.android.server.wm.WindowManagerService.windowForClientLocked(WindowManagerService.java:8562) W/WindowManager( 657): at com.android.server.wm.WindowState$DeathRecipient.binderDied(WindowState.java:1060) W/WindowManager( 657): at android.os.BinderProxy.sendDeathNotice(Binder.java:496) W/WindowManager( 657): at dalvik.system.NativeStart.run(Native Method) I/WindowState( 657): WIN DEATH: null V/InputMethodManagerService( 657): windowGainedFocus: android.os.BinderProxy@4284cbd0 controlFlags=#0 softInputMode=#10 windowFlags=#1810100 W/InputMethodManagerService( 657): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@42621308 attribute=null, token = android.os.BinderProxy@41f7d370 ... V/SettingsProvider( 657): call(system:anr_debugging_mechanism) for 0 W/ContextImpl( 2336): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1219 android.content.ContextWrapper.sendBroadcast:365 com.android.settings.applications.InstalledAppDetails.processClearMsg:1133 com.android.settings.applications.InstalledAppDetails.access$000:105 com.android.settings.applications.InstalledAppDetails$1.handleMessage:223 

发生的情况:

  • 这发生在几个小时的正常运行时间之后
  • 每当您连接蓝牙遥控器时,都会发生这种情况。 (已经配对了)。 空闲几分钟后,遥控器断开连接以节省电量。 只要你重新连接(通过按下button),应用程序崩溃并重新启动。

我到目前为止没有运气,

  • 将该应用安装为“普通”应用(不是启动器)
  • 卸载每个cordova插件

发生错误的设备:

  • Android 4.4.2平板电脑(“无名”产品) – 出现错误
  • Android 5.1平板电脑(“无名”产品) – 出现错误
  • Android 5.1.1手机(三星xCover) – 没问题!
  • Android 4.4.2手机(三星GALAXY S III Neo) – 没问题!

那么为什么平板电脑上的Android会杀死我的应用程序呢? 是因为他们有便宜的硬件,还是因为Android版本比较老? 我怎样才能防止这个错误?

UPDATE

我发现,这个问题不是编程相关的,因为这个问题发生在每个应用程序上 。 这就是为什么我发布了另一个关于Android爱好者的问题

Solutions Collecting From Web of "Android是强制杀死我的启动BT连接"

该问题是由运行时系统configuration的更改引起的。 默认情况下,活动不会处理这些,但只会重新启动。

请参阅https://developer.android.com/guide/topics/resources/runtime-changes.html

Cordova默认添加处理orientationkeyboardHiddenkeyboardscreenSizelocale

为了解决我们的问题,我们只需要添加处理configuration更改navigation到我们的活动,如下所示:

 <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|navigation"> 

在发生崩溃的设备中,出于某种原因,您是否拥有开发人员选项:不要让活动标记。

你使用改变活动的cordova插件吗?

看起来由于某种原因,一个活动正在被破坏,在这里你可以find一些信息:

https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#when-can-this-happen

这是所有应用程序的真实。 任何已经进入后台或没有被使用一段时间的应用程序,虚拟引擎将其设置为较低的优先级,当它需要内存或任何其他资源时,它会杀死应用程序。

你无法避免它。 你可以做的是在使用onSaveInsanceState()onRestoreInstanceState()杀死它的地方重新启动:

onSaveInstanceState()和onRestoreInstanceState()

另一个select是有一个服务附加到您的应用程序。 这样你的应用程序不会被杀害:

我们如何防止服务被操作系统杀死?

虽然我不是Android的专家,但看着日志我觉得关键在于以下几个方面:

“java.lang.IllegalArgumentException:请求的窗口android.os.BinderProxy@427d8618不存在”

当您尝试调用目标设备上不可用的系统API时,通常会发生此错误。 这就是为什么你说这个问题是依赖于设备的。 此外,这个问题导致应用程序重新启动,如你所说。 所有你需要弄清楚是什么API调用崩溃你的应用程序“

在我的文章中提到的另一个有趣的事情是,这个崩溃只发生在no-name产品。 所以我相信没有名称可能会导致蓝牙配对问题,内部BluetoothDevice.getName()可能会返回null导致crash.I坚信这是造成这个问题,并build议你看看这个链接的一些帮帮我。

它不是平板电脑或移动的问题。 我怀疑在您的平板电脑中启用了不保留活动选项 (开发人员选项)。 请检查一下。

Android 4.4.2平板电脑(“无名”产品) – 出现错误

Android 5.1平板电脑(“无名”产品) – 出现错误