2012-12-20 91 views
8

FIrst off我正在研究一個應用程序,當應用程序不在前臺時需要運行JavaScript;問題似乎是,當應用程序放入後臺/ webview與屏幕分離時,將調用webview的onPause方法,每個文檔執行以下操作: 「暫停與此WebView及其關聯的DOM相關的任何額外處理,插件,JavaScript等「當OS暫停時恢復Android webview /在後臺應用程序上運行JavaScript?

從我到目前爲止發現的我最好的選擇似乎是使用反射來調用webview的「onResume」方法,它應該取消所有這些進程掛起。使用我當前的實現,我得到了一個所述方法的實例,但是當調用時沒有任何事情發生,因爲隨後的JavaScript調用什麼都不做(請注意,當我打開應用程序並在前臺運行時,這會起作用)。

其他人看到一個問題,我的代碼或有一個解決方案來運行JavaScript時,您的應用程序在後臺沒有完全啓動應用程序?

Push消息進來說JavaScript需要如此意圖跑發送到通知服務在後臺運行:

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

在我的廣播接收機的onReceive,它生活在始終運行的後臺服務:

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(); 
      } 
     } 
    }); 

} 

reflectHiddenMethod反射法:

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(); 
     } 
    } 
} 
+0

有點realted [question](http://stackoverflow.com/questions/7884568/android-webview-inside-a-service)。主要思想 - 將通信部分從JavaScript移動到服務中。 – Stan

回答

1

不幸的是,這是行不通的。 WebView是一個UI組件,因此需要連接到該窗口。有關StackOverflow的其他參考資料,請點擊此處:Android webview inside a service?

一種可能性是尋找替代JavaScript庫來執行代碼而不需要WebView,例如,犀牛,V8或spidermonkey。

但是,最好的解決方案可能是在Java中實現推送消息傳遞。

+0

是的,一旦您開始讓應用程序在後臺運行javascript,您就很可能會讓設備速度太慢而無法用於所有者。 –

+0

你能提供任何參考嗎? Webview可以分離並連接到窗口而不會出現問題 –

相關問題