Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android在非UI線程中顯示Toast

Android在非UI線程中顯示Toast

編輯:關於Android編程

[java]
public void showToast(String msg){ 
        Looper.prepare(); 
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); 
        Looper.loop(); 
    } 

public void showToast(String msg){
  Looper.prepare();
  Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
  Looper.loop();
 }只需要加上那兩句就能在非UI線程中顯示Toast


[java]
Toast裡面的show() 
    public void show() { 
      ... 
        service.enqueueToast(pkg, tn, mDuration);   //把這個toast插入到一個隊列裡面  
        ... 
    } 

Toast裡面的show()
    public void show() {
      ...
        service.enqueueToast(pkg, tn, mDuration);   //把這個toast插入到一個隊列裡面
        ...
    }
[java]
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(); 
    } 

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 顯示需要出現在一個線程的消息隊列中.... 很隱蔽

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved