国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Intellij插件開發:MonkeyMaster插件的實現(三)——寫入日志的線程處理

2019-11-08 00:35:53
字體:
來源:轉載
供稿:網友

【轉載請注明出處】 筆者:DrkCore (http://blog.csdn.net/DrkCore) 原文鏈接:(http://blog.csdn.net/drkcore/article/details/56680079)

一、 插件開發中的線程問題

我想大部分從事過Android開發的朋友在第一次在IntelliJ Idea插件開發文檔中看到關于線程使用規范時,都會像筆者一樣困惑不已:

IntelliJ Platform SDK DevGuide: General Threading Rules

Reading data is allowed from any thread. Reading data from the UI thread does not require any special effort. However, read Operations performed from any other thread need to be wrapped in a read action by using applicationManager.getApplication().runReadAction() or, shorter, ReadAction.run/compute.

允許在任意線程讀取數據。從UI線程中讀取數據并不要求任何額外的操作,但在其他線程你需要將讀取的邏輯包裹在 ApplicationManager.getApplication().runReadAction()中才行,你也可以使用 ReadAction.run/compute 來簡化代碼。

Writing data is only allowed from the UI thread, and write operations always need to be wrapped in a write action with ApplicationManager.getApplication().runWriteAction() or, shorter, WriteAction.run/compute

只允許在UI線程寫入數據,并且寫入數據的邏輯必須包裹在 ApplicationManager.getApplication().runWriteAction() 才能執行,你也可以使用 WriteAction.run/compute 來簡化你的代碼。

“不要在主線程中執行耗時的操作”是我們在開發Android應用時應當牢記的準則。在Intellij Idea插件開發中顯然不是這樣的,按照文檔我們就該將寫入這樣的耗時操作放在UI線程,饒是如此,如果你一個寫入操作執行的時間太長UI照樣是會卡主的。

這里就會有一個問題:

Monkey測試的事件是隨機的要想測出問題就要花費大量的時間,并且日志通常很大。有不少同行都喜歡下班前執行一次超長的測試任務,第二天上班再查看日志。要是直接在UI線程中執行操作的話有可能會把整個Intellij Idea都卡主了。

將日志保存到內存中待任務結束后再一次性寫入磁盤是可以解決問題,但是一旦中途發生了異常就有可能導致日志丟失,并且運行時你無法查看日志文件。當然我們也可以設計成每輸出比如10K大小的日志數據時就執行一次保存操作,但開發起來就會比較糾結。

有沒有好點的解決方案呢?當然有!

熟悉命令行的朋友應該知道我們可以將命令行的輸出通過 > 符號保存到指定的文件中去,該方法對 Win / linux / os X 都是有效的。按照官方文檔我們可以在任何線程執行讀取操作,因此我們只要新開一個線程用于讀取日志文件接口即可。是不是忽然覺得這個插件開發起來好簡單啊……

掩面而泣

二、 代碼實現


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄城县| 米脂县| 贵德县| 平安县| 石楼县| 庆阳市| 内丘县| 桃园市| 松潘县| 屏东县| 新巴尔虎右旗| 长沙市| 万安县| 图木舒克市| 雅安市| 昭通市| 宽甸| 饶平县| 沾益县| 鄱阳县| 墨玉县| 溆浦县| 白城市| 霍城县| 泸西县| 长宁区| 铜川市| 望江县| 扎囊县| 丽江市| 滦南县| 晋城| 青冈县| 岢岚县| 襄垣县| 商城县| 含山县| 东明县| 临沭县| 普定县| 石家庄市|