如果后跟大代码,android单击侦听器中的语句不会立即执行

时间:2014-12-26 20:35:34

标签: android

如果我有一些函数调用,需要一些时间来执行并返回按钮的onclick监听器内部,onclick监听器的第一行只在函数调用执行完成后执行。

例如:
 在这里,我只能在函数somefunction()完成执行后才能看到吐司。

shareButton.setOnClickListener(new View.OnClickListener() {
    //@Override
    public void onClick(View v) {
      Toast.makeText(con,"hi",Toast.LENGTH_SHORT).show();
      somefunction()//takes sometime to execute and return
    }
}

1 个答案:

答案 0 :(得分:0)

发生这种情况的原因是,当您在show()上调用Toast时(这适用于大多数UI更新),应用程序将视图更新置于主线程的末尾&#39 ; s执行队列。要实现您的目标,请按以下方式在队列末尾发布someFunction()

public void onClick(View v) {
    Toast.makeText(con, "hi", Toast.LENGTH_SHORT).show();

    new Handler().post(new Runnable() {
        public void run() {
            somefunction();
        }
    });
}

当然,如果someFunction()导致UI延迟甚至略微明显,建议您在单独的线程上运行它。