Async分析
?1:android在新版本中不允許UI線程訪問網絡,但是如果需要訪問網絡又改怎么辦吶?這里有很多解決方案,比如新開一個線程,在新線程中進行訪問,然后訪問數據,返回后可能會更新界面也可能不更新界面,這個就涉及了怎么與UI線程通信的問題。?
? ? ? ?2:在android中UI線程中不能執行耗時太長的任務,否則會引發ANR,又怎么解決這個問題吶,其實也可以新開一個線程進行執行,執行完成后,在返回到UI線程,這也涉及了通信的問題。
? ? ? ?一般的解決方案都是采用Hander來進行線程間的通信,但是今天不談論Handler,而是談論在android1.5之后推出AsyncTask,該類可以非常方便的從子線程切換到UI線程。
async 函數和Generator 函數特別的像,他將 Generator 函數的星號(*)替換成 async,將 yield 替換成 await。但async相比來說,有所改進,
(1)內置執行器。?Generator 函數的執行必須靠執行器,所以才有了 co 函數庫,而 async 函數自帶執行器。也就是說,async 函數的執行,與普通函數一模一樣,只要一行——var result = asyncReadFile();
(2)更好的語義。?async 和 await,比起星號和 yield,語義更清楚了。async 表示函數里有異步操作,await 表示緊跟在后面的表達式需要等待結果。
(3)更廣的適用性。?co 函數庫約定,yield 命令后面只能是 Thunk 函數或 Promise 對象,而 async 函數的 await 命令后面,可以跟 Promise 對象和原始類型的值(數值、字符串和布爾值,但這時等同于同步操作)。
轉載于:https://www.cnblogs.com/douflamingo-666/p/8647396.html
總結
- 上一篇: mybatis一对一联表查询的两种常见方
- 下一篇: 【数论想法题】小C的问题 @科林明伦杯哈