如何从非UI的Widget线程中发布烤面包?[英] How to post toast from non ui Widget thread

问题描述

我正在尝试在窗口小部件中从非UI线程中调用函数后发布吐司.我已经阅读了多种方式来做这一点(发布/新手/广播),但大多数方法似乎都瞄准了活动而不是小部件类,我无法获得任何工作.

我有一些基本代码......谁能告诉我我需要做的最好的方法,也许提供一个例子......谢谢(显然我拿出了所有不必要的比特......

我知道你不能在小部件中使用runonuithread,但基本上做我想要的最好的方法是什么???

提前感谢

public class MyWidget extends AppWidgetProvider {

@Override
public void onReceive(final Context context, Intent intent) {
    super.onReceive(context, intent);
            new Thread(new Runnable() {
                public void run() {
                        DoStuff();
                }
            }).start();
}

 public void DoStuff () {

      //do a load of stuff on the non UI thread which might take some time and return a string

    String mymessage = "amessage"

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(context, mymessage, Toast.LENGTH_SHORT).show();
        }
    });


 }

}

推荐答案

您可以创建自己的runonuithread()版本.这就是我在需要在活动外部运行UI线程中的内容时使用的:

public final class ThreadPool {
    private static Handler sUiThreadHandler;

    private ThreadPool() {
    }

    /**
     * Run the {@code Runnable} on the UI main thread.
     *
     * @param runnable the runnable
     */
    public static void runOnUiThread(Runnable runnable) {
        if (sUiThreadHandler == null) {
            sUiThreadHandler = new Handler(Looper.getMainLooper());
        }
        sUiThreadHandler.post(runnable);
    }

    // Other, unrelated methods...
}

然后,您可以简单地调用ThreadPool.runOnUiThread(runnable).

您可以了解有关此帖子系列中的工作原理的更多信息: android:亨德,处理程序,handlerthread.第一部分

其他推荐答案

  • 您应该使用Asynctask for do to the Lacture中的东西而不是 使用thread().
  • ,如果你只想要一个简单的吐司删除线程()和吐司 消息.
  • 如果您仍然需要使用线程并想要显示消息.您可以 使用以下吐司消息:

if(looper.mylooper()== null){

    Looper.getMainLooper();

}

循环.prepare();

new handler().post(新runnable(){

    @Override
    public void run() {

        Toast.makeText(LargeAppWidget.this.context, "Sample Text", Toast.LENGTH_SHORT).show();

    }
});

Looper.loop();

不建议使用循环器.

本文地址:https://www.itbaoku.cn/post/978452.html