首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黑色webview onResume

黑色webview onResume
EN

Stack Overflow用户
提问于 2014-09-08 10:18:26
回答 1查看 692关注 0票数 0

我的应用程序中有一个WebView,我希望它永远运行。

当我回到我的应用程序(onResume)时,WebView是一个黑色的屏幕.

我尝试了多种解决方案和布局。我正在使用函数WebView (W)添加setContentView;

在第一次运行时,它可以正常工作。当我按home按钮时,WebView仍然在运行(console.log(),来自javascript给予反馈)。回到应用程序,我看到了一个黑色的屏幕。WebView还在运行,但我看不见它。

我还尝试将其添加到.xml视图文件中,但没有结果。我也想防止页面重新加载。我试图将视图设置为可见的。尝试了一些函数,如w.invalidate()。

MainActivity.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>

也许有人知道该怎么走?

EN

回答 1

Stack Overflow用户

发布于 2014-09-08 10:28:49

不是的。

服务显式地用于处理后台数据。不允许显示服务中的任何内容(少数特殊情况除外),也不建议使用。

在你的情况下,我可以看出你在做什么

代码语言:javascript
复制
setContentView(...);

只有一次。尝试将其重新附加到

代码语言:javascript
复制
else {
    TestService.setAgain(); 
}

条件,因为这就是为什么你会有黑色屏幕。

然而,我仍然可以看到一个非常糟糕的设计在这里。我想我能帮上忙,如果你能准确地说出你想要达到的目标。你的工作流程的目的是什么。

我想这可能与在后台运行的某种javascript有关?一般来说,这是一种糟糕的做法。用户将期望应用程序停止消耗资源,一个家庭被按下或应用程序被从前台取走。当然,除非您正在编写基于javascript的比特币矿工:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25722005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档