SEO实战技术培训
一鸣叫兽SEO培训-国内知名企业SEO专家、专注SEO实战培训教学、全程一对一独立辅导。
文章27345 建站 浏览5321318

安卓toast是什么意思怎么用(详解:Toast提示、Snackbars和Alert)

原文标题:(安卓toast是什么意思怎么用(详解:Toast提示、Snackbars和Alert))

但是吐司不能直接显示在副标题中吗?

答案是:当然。

应该如何做?首先在当前线程中初始化一个循环!

Looper.prepare(); Toast.makeText(getBaseContext(), "text", Toast.LENGTH_LONG).show(); Looper.loop();

为什么在儿童线程中使用吐司需要初始循环?让我们看看源代码:

public static Toast makeText(Context context, CharSequence text, @Duration int duration) { return makeText(context, null, text, duration); } public static Toast makeText(@NonNull Context context, @Nullable Looper looper, @NonNull CharSequence text, @Duration int duration) { Toast result = new Toast(context, looper); ... return result; }

以上是我们在使用Toast时调用的静态方法。我们可以看到第二种方法有一个参数Looper。虽然我们通常传入空值,但这个循环有什么用?让我们看看吐司的构造函数:

public Toast(@NonNull Context context, @Nullable Looper looper) { mContext = context; mTN = new TN(context.getPackageName(), looper); }

我们可以看到这个活套实际上正在使用中。让我们看看它的构造函数:

TN(String packageName, @Nullable Looper looper) { if (looper == null) { // Use Looper.myLooper() if looper is not specified. looper = Looper.myLooper(); if (looper == null) { throw new RuntimeException( "Can't toast on a thread that has not called Looper.prepare()"); } } }

上述代码已简化。可以看出,当Looper为空时,会通过Looper.myLooper获得一个当前的Looper,我们知道系统已经在主线程中为我们初始化了一个主Looper,所以我们一般不用担心它。但是,如果Looper没有在我们的子线程中初始化,调用Looper.myLooper在这里不会得到Looper,并且会抛出异常。因此,当我们在子阈值中使用Toast时,我们可以用Looper.prepare()方法初始化一个Looper,然后用Looper.loop()方法启动它。

所以我们可以封装一个可以在任何线程中使用的吐司。

private static Toast toast = null; public static void showToast(Context context, String text) { Looper myLooper = Looper.myLooper(); if (myLooper == null) { Looper.prepare(); myLooper = Looper.myLooper(); } if (toast == null) { toast = Toast.makeText(context, text, Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); } toast.show(); if ( myLooper != null) { Looper.loop(); myLooper.quit(); } }

在初始化Toast之前,我们首先确定当前线程的循环程序是否为空,如果是空,我们初始化一个新的循环程序,然后在调用Toast的show方法后让循环程序启动。因为Looper的循环()方法是无限循环,为了防止Looper阻塞线程并造成内存泄漏,Looper应该及时退出。

写在的末尾

在子线程中直接使用 Toast 及其原理


原文标题:(安卓toast是什么意思怎么用(详解:Toast提示、Snackbars和Alert))

TAG:

最后编辑于: 2019-10-10 13:50:52作者:Admin_Long

一鸣叫兽-让你成为一个能熟练运用SEO核心技能的SEO技术人才!

  • 作者相关
  • 免费领取SEO教程,名额有限,先到先得!QQ:912037469
上一篇:网络营销策略有哪些(网络营销6大策略)
下一篇:简单讲解什么是质点(细看“质点”的思维形成)
评论(条)

验证码:
'); })();