等待webview中的javascript完成以继续Android Java

时间:2016-11-08 02:19:52

标签: java android multithreading webview countdowntimer

我是学习java的新手。我一直在努力工作2天。我会生气的。请帮帮我

我希望当我的函数运行时,所有活动必须等到我的函数完成。

一个例子

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide();
    setContentView(R.layout.activity_main);
    webView2 = (WebView) findViewById(R.id.webView);

    Log.v("htmlg","oncreate started");

    main_command();
    /*
    *
    *  main_command(), When this command run application must wait in here.
    *
    * */

    Log.v("htmlg", "oncreate finished");

}

public static int finished = 0;

public void main_command(){

    /*
    * 
    * There is some webview actions in here. it takes about 5 minutes. 
    * 
    * When webview operations are finished.
    * I call javascript command javascript:window.HTMLOUT.ok(); 
    * I want everything wait until webview operations are finished and javascript command runned. 
    * 
    * */

}

但我无法做到这一点。当main_command()运行时,Log.v()函数将立即运行。但是main_command()仍在运行,但尚未完成。当它完成一个javascript命令将调用android内的一个函数。然后流程将完成,应用程序可以继续工作。

现在,我告诉我的经历。

  • 我试图在Asynctask中编写webview代码,但我无法在asynctask中使用webview。

  • 我把webview放在rununithread()里面的asynctask中,我不能再做了。

  • 我试图将main_command()放在CountdownTimer中但是" oncreate finished"在CountdownTimer完成之前运行的行。

现在我感到无助。我不太了解java或android编程。我是php程序员。我尝试做webview应用程序。我不太了解java结构。如果可以的话,你能写出正确的工作代码示例吗?因为我不了解所有的例子。我查看并阅读了所有可能有解决方案,但我无法理解。我需要你的帮助。

由于

1 个答案:

答案 0 :(得分:0)

你不想阻止主线程,否则android系统会显示"应用程序没有响应"错误。而且您的用户很可能会选择杀死该应用。

据我所知,您希望通过javascript命令调用应用程序时恢复应用程序。这是你可以继续的方式:

  1. 创建一个函数postMainCommand()。在此方法中,编写在javascript命令调用之后需要执行的所有内容。我的意思是:

    Log.v("htmlg", "oncreate finished");
    

    在网络工作完成后调用此方法。

  2. 直到您的工作正在进行中,您可以显示一个不可取消的进度对话框,其中包含一些文字,例如"请稍候......"。或者,如果您可以跟踪进度,可以继续更新消息:

    ProgressDialog dialog = new ProgressDialog(this);
    dialog.setMessage("Please wait...");
    dialog.setCancelable(false);
    dialog.show();
    

    不可取消,因为您不希望用户与其间的应用进行互动,对吗?

  3. 当您的网络视图作业结束时,请致电dialog.cancel();