最佳方式处理来自UI上的线程的结果

时间:2017-12-04 10:01:07

标签: android android-runonuithread

我想在新Thread中将数据保存到数据库,然后在toast上显示UI

保存方法:

public void addToBasket(String text) {

        new Thread(() -> {

                //emulate save
                try {
                    Thread.sleep(5000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
              //after that I need say ti UI thread - show Toast!
        }).start();
    }

我称这种方法为:

BasketService.me().addToBasket(result.getContents());

我现在想要使用AsyncTask。请告诉我实施此类任务的最佳方式

2 个答案:

答案 0 :(得分:-1)

要使用的击球手:

runOnUiThread(new Runnable() {
                public void run() {
                //Do what ever you want do man 
            }
        });

runOnUiThread()方法从后台线程操作UserInterface

答案 1 :(得分:-1)

如果从nonUi线程回调到Ui线程,您可以使用runOnUiThread()(如上所述)或Handler。下面是使用处理程序的示例。

 protected static final Handler mainThreadHandler = new Handler(Looper.getMainLooper());

protected void onSuccessInMainThread(final R result, final Bundle bundle) {
    mainThreadHandler.post(new Runnable() {
        @Override
        public void run() {
            callback.onSuccess(result, bundle);
        }
    });
}

protected void onErrorInMainThread(final Exception error) {
    mainThreadHandler.post(new Runnable() {
        @Override
        public void run() {
            callback.onError(error);
        }
    });
}