当OS暂停时恢复Android的webview /在后台的应用程序上运行JavaScript?

首先closures我正在处理一个应用程序,当应用程序不在前台时需要运行JavaScript; 问题似乎是,当应用程序被放入后台/ webview从屏幕上分离时,webview的onPause方法被调用,每个文档执行以下操作:“暂停与此WebView及其关联的DOM相关的额外处理,插件,JavaScript等“

从我迄今为止发现,我最好的select似乎是使用reflection来调用webview的“onResume”方法,它应该撤销所有这些进程暂停。 用我目前的实现,我得到了一个实例的方法,但是当调用什么都没有发生,因为我的后续JavaScript调用什么都不做(当我打开应用程序并在前台时,请注意,这是有效的)。

其他人看到我的代码问题或有一个解决scheme,当您的应用程序在后台运行JavaScript没有完全启动应用程序?

推送消息来说,JavaScript需要运行,所以意图发送通知在后台运行的服务:

Intent intent = new Intent( "some action" ); intent.putExtra( "xtifyJson", xtifyJSON.toString() ); context.sendBroadcast( intent ); 

在我的广播接收器的接收器中,居住在后台的服务总是在运行:

 final String stringArrayExtra = intent.getStringExtra( "xtifyJson" ); if ( !Text.isNull( stringArrayExtra ) ) { new Handler( context.getMainLooper() ).post( new Runnable() { @Override public void run() { try { Log.d( "Hey Dev Guy", "Message received" ); JavaScriptInterface javaScriptInterface = ( (SpecialApplication) getApplicationContext() ).getJavaScriptInterface(); relectHiddenMethod( javaScriptInterface.getParentWebView(), "onResume" ); javaScriptInterface.getParentWebView().resumeTimers(); javaScriptInterface.callBackPushReceived( new JSONObject( stringArrayExtra ) ); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ); } 

reflection隐藏方法reflection方法:

 private void reflectHiddenMethod( final WebView webview, final String name ) { if ( webview != null ) { try { Method method = WebView.class.getMethod( name ); Object invoke = method.invoke( webview ); } catch (final Exception e) { e.printStackTrace(); } } } 

Solutions Collecting From Web of "当OS暂停时恢复Android的webview /在后台的应用程序上运行JavaScript?"

不幸的是,这是行不通的。 WebView是一个UI组件,因此需要连接到窗口。 在这里有关于这个像这样的StackOverflow的其他参考: 在服务中的Android webview? 。

一种可能性是寻找替代的JavaScript库来执行你的代码而不需要WebView,例如Rhino,V8或者spidermonkey。

但是,最好的解决scheme可能是在Java中实现推送消息传递。