Android 黑色网络视图恢复
我的应用程序中有一个WebView,我希望它永远运行 当我返回到我的应用程序(onResume)时,网络视图是一个黑屏… 我尝试了多种解决方案和布局。我正在添加带有函数setContentView(w)的WebView 第一次运行时,它运行良好。当我按下home按钮时,WebView仍在运行(来自javascript的console.log(),提供反馈)。回到应用程序,我看到一个黑屏。WebView仍在运行,但我看不到它:( 我还尝试将其添加到.xml视图文件,但没有结果。我还希望防止重新加载页面。我尝试将视图设置为可见。尝试了一些函数,如w.invalidate() MainActivity.javaAndroid 黑色网络视图恢复,android,view,webview,onresume,onpause,Android,View,Webview,Onresume,Onpause,我的应用程序中有一个WebView,我希望它永远运行 当我返回到我的应用程序(onResume)时,网络视图是一个黑屏… 我尝试了多种解决方案和布局。我正在添加带有函数setContentView(w)的WebView 第一次运行时,它运行良好。当我按下home按钮时,WebView仍在运行(来自javascript的console.log(),提供反馈)。回到应用程序,我看到一个黑屏。WebView仍在运行,但我看不到它:( 我还尝试将其添加到.xml视图文件,但没有结果。我还希望防止重新加载
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();
}
}
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)
}
}
TestService.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();
}
}
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>
Webview测试Android
身体{
背景:白色;
}
html{
最小宽度:100%;
最小高度:100%;
}
计数器
var计数器=0;
document.getElementById(“计数器”).innerHTML=计数器;
setTimeout(函数(){count();},1000);
功能测试(){
控制台日志(“测试”);
警惕(“Jooo”);
}
函数计数(){
计数器++;
document.getElementById(“计数器”).innerHTML=计数器;
setTimeout(函数(){count();},1000);
控制台日志(“计数”+计数器);
}
试验
也许有人知道正确的道路吗?没有
该服务明确用于在后台处理数据。
不允许显示服务中的任何内容(少数特殊情况除外),也不建议显示
就你而言,我能看出你在做什么
setContentView(...);
仅一次。请尝试在中重新连接它
else {
TestService.setAgain();
}
条件,因为这就是为什么你会出现黑屏
然而,我仍然可以看到一个非常糟糕的设计。我想我可以帮助你,如果你能准确地说明你正在努力实现什么-即,你的工作流程的目的是什么
我猜这可能与在后台运行的某种javascript有关?通常这是一种不好的做法。用户会希望应用程序在按下某个主页或将应用程序从前台移除时停止消耗资源。当然,除非您正在编写基于javascript的比特币miner:)是的。我觉得我的安卓技能不太好。。。我想做的是保持NodeJs站点打开。我尝试做的一个例子是一种Gps跟踪。我想在有人需要此用户时向应用程序提供反馈。然后,我可以为用户干杯。如果您试图从web环境访问本机功能,也可以尝试将其作为位于后台服务中的基于REST的调用,而不是整个webview。考虑到它将产生的负载,该平台很可能会很快终止您的服务。此外,没有100%的保证在应用程序被终止后,此服务将继续使用。尝试使用简单的HTTP访问RESTAPI,而不是使用javascript。通过这种方式,您可以从后台运行一小部分数据。Ok。我明白这是一种不好的方式。因此,也许这比重新加载整个页面要好。并从本机应用程序获取一些数据。