`
king_tt
  • 浏览: 2234071 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android在非UI线程中显示Toast

阅读更多
public void showToast(String msg){
		Looper.prepare();
		Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
		Looper.loop();
	}

只需要加上那两句就能在非UI线程中显示Toast

 

Toast里面的show()
    public void show() {
      ...
        service.enqueueToast(pkg, tn, mDuration);   //把这个toast插入到一个队列里面
        ...
    }

 

Looper
public static final void prepare() {
        if (sThreadLocal.get() != null) {
            throw new RuntimeException("Only one Looper may be created per thread");
        }
       sThreadLocal.set(new Looper());  //在当前线程中创建一个Looper
    }

private Looper() {
        mQueue = new MessageQueue();  //关键在这,创建Looper都干了什么。 其实是创建了消息队列
        mRun = true;
        mThread = Thread.currentThread();
    }



总结下:Toast 显示的必要条件:
1:Toast 显示需要出现在一个线程的消息队列中.... 很隐蔽

分享到:
评论

相关推荐

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    如果尝试在非UI线程中直接修改UI组件,将会触发`CalledFromWrongThreadException`异常。 为了提高用户体验并避免UI卡顿,开发者通常会在后台线程执行耗时的操作(如复杂的计算、I/O读写等),并将结果通过某种方式...

    Android Toast 自定义背景、图片 随心使用

    值得注意的是,`Toast`是线程安全的,可以在任何线程中创建和显示,但在主线程中调用`show()`方法以确保UI更新的正常进行。此外,`Toast`的生命周期较短,一旦显示完毕,它就会自动消失,无需手动清理。 在实际项目...

    android 解决Toast重复显示问题

    3. **检查线程**:在多线程环境中,确保`Toast`的创建和显示都在主线程进行,因为`Toast`必须在UI线程中显示。 4. **避免循环调用**:如果`Toast`在循环或定时任务中使用,可以设置一个标志位来控制是否需要显示,...

    android service toast 01

    使用Toast时,我们需要确保操作在UI线程(主线程)中进行,因为Android的UI更新必须在主线程中完成。然而,Service通常运行在自己的工作线程中,这意味着在Service中直接使用Toast可能会导致`android.view....

    androidToast大全(五种情形)[归类].pdf

    由于Android规定只能在UI线程中进行界面更新,如果需要在后台线程中显示Toast,可以使用Handler或者runOnUiThread()方法。在后台线程中,需要创建一个新的Runnable,在该Runnable的run()方法中调用显示Toast的代码。...

    安卓Android源码——五种不同的Toast效果.zip

    在Android开发中,Toast是一种常见的UI元素,用于向用户显示简短的信息,通常在屏幕上短暂显示后自动消失。本资源“安卓Android源码——五种不同的Toast效果.zip”包含了一个示例项目,展示了如何实现五种不同的...

    Qt仿Android的toast控件效果

    在本文中,我们将深入探讨如何使用Qt Widget Application技术来创建一个类似于Android中toast的控件效果。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动以及嵌入式设备上。而Android的toast控件是一种...

    Toast的几行代码

    在主线程中频繁使用`Toast`可能会阻塞UI,因此建议在子线程中创建并显示`Toast`,并通过`runOnUiThread`确保在UI线程执行: ```java context.runOnUiThread(new Runnable() { @Override public void run() { ...

    android service thread toast handler

    同时,`Handler`可能被用来在服务完成某些操作后,通过`Toast`向用户反馈结果,确保这些反馈消息在UI线程中正确显示。 项目名"ServiceToast"可能表示这是一个关于如何在`Service`中使用`Thread`和`Handler`来显示`...

    android Toast大全(五种情形)

    在非UI线程中显示`Toast`需要通过`Handler`或其他方式传递到主线程执行。 **代码示例:** ```java new Thread(new Runnable() { public void run() { showToast(); } }).start(); ``` **解析:** - 创建新线程...

    Android Service中使用Toast无法正常显示问题的解决方法

    当在Service中调用`Toast.makeText()`时,由于Service运行在自己的后台线程中,而不是UI线程,因此创建的Toast不会被立即显示。此外,Service的Context与Activity的Context不同,尽管`getApplicationContext()`返回...

    Android Toast各种使用方法及DEMO

    如果在主线程以外的地方显示`Toast`,需要确保在UI线程中执行,可以使用`runOnUiThread()`: ```java context.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(context, "异步...

    android中load_Toast_dialog

    在提供的文件"下载_简讯_对话框"中,可能包含了一些示例代码或教程,用于演示如何在Android应用中实现加载、显示`Toast`和创建`Dialog`。通过学习这些资源,开发者可以更好地理解和实践Android开发中的这些关键概念...

    Android高级应用源码-自定义彩色Toast.zip

    如果在子线程中创建或显示Toast,可能会导致ANR(Application Not Responding)错误。 9. **生命周期管理** 在Activity的生命周期方法中,如`onPause()`、`onResume()`,需要适当地取消或重新显示自定义Toast,以...

    带图片的Toast,可显示到屏幕任意位置

    在Android的UI线程中,通常推荐使用`runOnUiThread`或`Handler`来处理UI更新,以防止在非主线程中修改UI元素导致的ANR(应用无响应)异常。对于包含图片的`Toast`,我们需要特别注意异步加载图片和显示`Toast`的时机...

    详解Android中OkHttp3的例子和在子线程更新UI线程的方法

    OkHttp3在Android中的应用和子线程更新UI线程的方法 OkHttp3是一个功能强大且流行的HTTP客户端库,在Android开发中广泛应用于处理HTTP请求。然而,在使用OkHttp3时,需要注意一些关键点,以避免一些常见的错误。 ...

    Toast的各种用法

    你可以使用`runOnUiThread`或`Handler`确保`Toast`在UI线程中显示: ```java new Thread(new Runnable() { @Override public void run() { // 在子线程中执行任务 ... // 在UI线程中显示Toast activity....

Global site tag (gtag.js) - Google Analytics