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