加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 当关闭主线程时,如何才能尽快在主线程上运行一些代码?

发布时间:2020-12-15 03:01:26 所属栏目:Java 来源:网络整理
导读:我有一个部分基于Web的用户界面(WebView).它通过 Javascript Interface连接到Android UI.当您点击WebView中的元素时,javascript调用Android和Android接收javascript / web线程上的调用.不是UI(主)线程. 它以1毫秒或更短的时间到达Android.没问题.但是,因为我
我有一个部分基于Web的用户界面(WebView).它通过 Javascript Interface连接到Android UI.当您点击WebView中的元素时,javascript调用Android和Android接收javascript / web线程上的调用.不是UI(主)线程.

它以1毫秒或更短的时间到达Android.没问题.但是,因为我现在要更改UI,所以我必须切换到UI线程. (如果从主线程修改UI,Android会抛出异常).我目前在UI线程上使用Handler并调用post().

然后在120到300毫秒之后的任何地方调用此代码(Runnable).这是UI从用户的触摸中改变的非常明显的滞后.

有没有办法让一些代码更快地在UI线程上运行?这是一些示例代码:

接口类:

public class JSInterface {

    public void test() {
        // Arrives here in 1ms after calling AndroidInterface.test(). Arrives n the web thread.

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // Arrives here 100ms to 300ms after calling AndroidInterface.test(). Arrives on the main (UI) thread.
            }

        });

    }

}

添加到这样的webview:

webview.addJavascriptInterface(new JSInterface(),"AndroidInterface");

像这样的javascript调用:

AndroidInterface.test();

谢谢!

解决方法

Is there any way to get some code to run on the UI thread faster?

runOnUiThread()和kin在主应用程序线程处理的消息队列上放置一条消息.大多数情况下,主应用程序线程的工作是从队列中提取消息并对其进行处理.但是,主应用程序线程也负责调用大多数回调.

如果你看到“120和300毫秒”延迟,这意味着两个不相互排斥的东西之一:

>队列有很多积压
>主应用程序线程忙于执行其他一些代码

与普通小部件相比,WebView,队列和主应用程序线程之间的关系相当神秘,因为WebView不是用Java代码呈现的经典小部件.因此,我不知道您的Web内容中是否存在可能解释此问题的内容,或者对于WebView是否相当正常.您可以尝试使用更简单的Web内容进行实验,看看是否会出现类似的延迟,或者延迟是否与您正在呈现的特定Web内容更加紧密相关.

推送来推,使用Handler和postAtFrontOfQueue().但是,正如the JavaDocs for that method所说,这很危险.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读