如果上下文是一样的,为什么Toast是在Android中生成的?

如果上下文是一样的,为什么Toast是在Android中生成的?,第1张

概述我有一个传统的 IntentService,尝试使用Toast消息显示错误消息.1我想要显示消息,并添加了代码以使其正确的线程.最简单的变化是传递构造的 Toast对象,然后显示在UI线程上.但是,只有当我把它放在已运行的东西中时,Toast才会显示,而不是如果我通过预制的吐司. 这样做: @Overrideprotected void onHandleIntent(Intent intent) 我有一个传统的 IntentService,尝试使用Toast消息显示错误消息.1我想要显示消息,并添加了代码以使其正确的线程.最简单的变化是传递构造的 Toast对象,然后显示在UI线程上.但是,只有当我把它放在已运行的东西中时,Toast才会显示,而不是如果我通过预制的吐司.

这样做:

@OverrIDeprotected voID onHandleIntent(Intent intent) {    showToast("Error",Toast.LENGTH_LONG);}private voID showToast(final String msg,final int duration) {    new Handler(getMainLooper()).post(new Runnable() {        @OverrIDe        public voID run() {            // Make and show the toast in the posted runnable            Toast.makeText(getApplicationContext(),msg,duration).show();        }    });}

这不行:

@OverrIDeprotected voID onHandleIntent(Intent intent) {    // Make the toast here    Toast myToast = Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG);    showToast(myToast);}private voID showToast(final Toast toast) {    new Handler(getMainLooper()).post(new Runnable() {        @OverrIDe        public voID run() {            // Show the toast here            toast.show();        }    });}

在这两种情况下,上下文都是应用程序上下文,我没有看到任何源代码会导致一个版本正常工作,而另一个版本没有.相反,后者具有与ToentService中直接显示的Toast相同的问题:“Handler(androID.os.Handler){…}在死线程上向Handler发送消息”,Toast不消失等.

为什么吐司必须在主线程上制作,而不是在那里显示?

1.遗产=我不认为在Toast中显示错误消息是很好的UI,我不认为直接向用户显示消息的服务是一个好主意,但这是我传递的代码,我想让它这点好一点

解决方法 在您发布的第二个代码中,Toast是在后台线程中创建的,该后台线程设置了一个 *** 作符和处理程序(这是IntentService的一点).

Toast使用当前线程的触发器来创建一个处理程序,但是一旦IntentService完成处理onHandleIntent的工作,它将停止自己(如果没有其他意图处理) – 破坏您的Toast的处理程序所依赖的线程.

行327:https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/Toast.java

在runnable做烤面包是因为在这一点上,当前的线程是UI线程.

总结

以上是内存溢出为你收集整理的如果上下文是一样的,为什么Toast是在Android中生成的?全部内容,希望文章能够帮你解决如果上下文是一样的,为什么Toast是在Android中生成的?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存