Toast要注意的地方

2021-07-03 23:18:57 字數 2628 閱讀 9037

乙個小demo,無意間,在子執行緒中toast了一把,竟然報錯了

因為toast在service和activity中都可以執行。所以開始就認為和ui執行緒沒有有太大的關係,而現在子執行緒toast竟然報錯!無奈之下,花了半天的時間看了一下handler,looper,toast的原始碼,終於搞定了。(這個效率..本人愚鈍啊)----->的確和ui執行緒沒有關係

記錄下來,希望對遇上同樣問題的同學有所幫助。下面正題

1、錯誤的關鍵位置在於toast初始化的時候,這句

public class toast

2、其實在別的地方也看到過,普通執行緒不能直接new乙個handler

原因:? 1

2

3

4

5

6

7

8

9

10

11

12

publichandler()

}

3、而looper中?

1

2

3

4

publicstaticfinallooper mylooper()

而事實上子執行緒只是乙個普通的執行緒,其threadloacl中沒有設定過looper,所以會丟擲異常

4、解決方法?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

publicvoidonclick(view v) ;

}.start();

}

looper.prepare()方法參考?

1

2

3

4

5

6

7

8

9

10

11

12

13

//looper

publicstaticfinalvoidprepare()

sthreadlocal.set(newlooper());

}

下邊的可以忽略了

5、至於內部的通訊機制就不知道了

只知道show()方法裡邊呼叫了inotificationmanager. enqueuetoast(pkgname, tn, mduration)

其中tn是繼承了itransientnotification.stub的遠端通訊介面,而handler也是在這個tn類中呼叫!猜想內部機制也是notificationservice的程序間通訊機制!

下邊**,算是管中窺豹吧

-----原始碼不是這個樣子的,被我概括

itransientnotification中有個show方法?

1

2

3

4

5

6

publicvoidshow()

其中mshow是?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

finalrunnable mshow =newrunnable()

};

文章出處:

ITextField要注意 的地方

textfield uitextfield alloc initwithframe cgrectmake 100,14,205,20 textfield.placeholder input sms filter content textfield.font uifont systemfontofsi...

textFiled要注意的地方

原帖 textfield uitextfield alloc initwithframe cgrectmake 100,14,205,20 textfield.placeholder input sms filter content textfield.font uifont systemfonto...

UDP要注意的地方

1.udp伺服器大多數都是迭代伺服器。2,沒有流量控制,可以很容易的讓接收端緩衝區溢位 3.其沒有傳送緩衝區,但是乙個套接字公用乙個接收緩衝區 來自不同端的訊息都放在這個緩衝區中。4,可以傳送0位元組長度的資料,接收0自己長度的資料。並不像tcp套接字上read返回0值,表示對端已關閉。因為其是無連...