我的应用程序中有一个WebView,我希望它永远运行。
当我回到我的应用程序(onResume)时,WebView是一个黑色的屏幕.
我尝试了多种解决方案和布局。我正在使用函数WebView (W)添加setContentView;
在第一次运行时,它可以正常工作。当我按home按钮时,WebView仍然在运行(console.log(),来自javascript给予反馈)。回到应用程序,我看到了一个黑色的屏幕。WebView还在运行,但我看不见它。
我还尝试将其添加到.xml视图文件中,但没有结果。我也想防止页面重新加载。我试图将视图设置为可见的。尝试了一些函数,如w.invalidate()。
MainActivity.java
public class MainActivity extends Activity {
public static final String EXTRA_FROM_NOTIFICATION = "EXTRA_FROM_NOTIFICATION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("main"," create ");
if (savedInstanceState == null) {
Intent i = new Intent(MainActivity.this, TestService.class);
TestService.setMain(this);
TestService.setView();
MainActivity.this.startService(i);
} else {
TestService.setAgain();
}
}
@Override
public void onBackPressed() {
Log.v("main","back press");
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onResume() {
super.onResume();
}
}TestService.java
public class TestService extends Service {
private static WebView w;
private static MainActivity ma;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
public static void setMain(MainActivity a) {
ma = a;
Log.e("main", " setData " );
}
public static void setView() {
Log.e("TestService", "FIRST TIME SETUP");
w = new WebView(ma);
ma.setContentView(w);
w.getSettings().setDomStorageEnabled(true); // use localstorage
w.getSettings().setJavaScriptEnabled(true);
w.loadUrl("file:///android_asset/www/index.html");
}
public static void setAgain() {
w.bringToFront();
w.loadUrl("javascript: test();");
Log.e("TestService", w.getVisibility() + ""); // returns 0 (View.VISIBLE)
}
}index.html
<html>
<head>
<title>Webview test Android</title>
<style>
body {
background: white;
}
html {
min-width:100%;
min-height:100%;
}
</style>
</head>
<body>
Counter<br>
<h1><div id="counter"></div></h1>
<script>
var counter = 0;
document.getElementById("counter").innerHTML = counter;
setTimeout(function(){ count(); }, 1000);
function test() {
console.log("Test");
alert("Jooo");
}
function count() {
counter++;
document.getElementById("counter").innerHTML = counter;
setTimeout(function(){ count(); }, 1000);
console.log("count " + counter);
}
</script>
<font color="#ff0">Test</font>
</body>
</html>也许有人知道该怎么走?
发布于 2014-09-08 10:28:49
不是的。
服务显式地用于处理后台数据。不允许显示服务中的任何内容(少数特殊情况除外),也不建议使用。
在你的情况下,我可以看出你在做什么
setContentView(...);只有一次。尝试将其重新附加到
else {
TestService.setAgain();
}条件,因为这就是为什么你会有黑色屏幕。
然而,我仍然可以看到一个非常糟糕的设计在这里。我想我能帮上忙,如果你能准确地说出你想要达到的目标。你的工作流程的目的是什么。
我想这可能与在后台运行的某种javascript有关?一般来说,这是一种糟糕的做法。用户将期望应用程序停止消耗资源,一个家庭被按下或应用程序被从前台取走。当然,除非您正在编写基于javascript的比特币矿工:)
https://stackoverflow.com/questions/25722005
复制相似问题