【轉載請注明出處】 筆者: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 都是有效的。按照官方文檔我們可以在任何線程執行讀取操作,因此我們只要新開一個線程用于讀取日志文件接口即可。是不是忽然覺得這個插件開發起來好簡單啊……

新聞熱點
疑難解答