全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1435
推到 Plurk!
推到 Facebook!

有關splash 的問題

缺席
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-09-24 08:39:37 IP:59.120.xxx.xxx 未訂閱
xe10發表以來, 我以自己xe8的程式進行測試, 發現目前最大的問題是

XE7 由 splash 畫面出現 -> 黑畫面 -> 啟動 程式, 這過程 7秒鐘
XE8 由 splash 畫面出現 -> 黑畫面 -> 啟動 程式, 這過程 3秒鐘
XE10由 splash 畫面出現 -> 黑畫面 -> 啟動 程式, 這過程 遠過10秒鐘

這段黑畫面等待時間已超出常人可忍受的程度, 我們已釋出了XE8的APP, 如果一旦用XE10發佈的, 可能死一票, 每個客戶都會認為APP當機, 這幾天我秀給好多人都不能接受,
我也查了網路好多人在討論, 官網文章則建議我們不要在APP CREATE 完成前做太多事, 最好很多CODE是讓APP 完成CREATE 後再執行, 然而我也特別改了一下去測試(把ON CREATE 的內容全部數移走), 但只節了1秒鐘, 換句話說, XE10 的啟動還是非常的慢, 不知到底XE10動了什麼造成如此巨大的影響
或者有其他方法不要有黑畫面(但我查網的結果是悲觀的, 因為大家都說這是ANDROID 系統的限制, splash在app 一旦進入主程序就會自動close, 而app未完成create前又沒有辦法做什麼事)
不知各位使用上有沒有什麼可建議的呢?
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-09-24 20:17:44 IP:220.134.xxx.xxx 訂閱
可以用 Log.D(...) 去查查到底那一段程式碼拖慢的.

再用 Android Debug Monitor 去看記錄

參考:
http://www.gesource.jp/weblog/?p=6619
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-09-25 00:07:53 IP:61.224.xxx.xxx 未訂閱
感謝 main chen 的指導, 不過因為提供的方法我未曾學習過, 不是清楚標準的用法如何, 還是採用土法練鋼的做法, 既然embt說盡量避免在 on create 執行太多動作, 所以我把 on create事件內的所有code先移除, 然後一筆筆重新加回來測試, 找到了問題點, 也解決了10杪的黑畫面問題, 但我比較好奇的不是於程式寫問題, 而是在原封不動的source code 在 xe8 下只有3秒的黑屏, 但在 xe10卻要耗超過4倍時間才能完成, 到底 10改了什麼系統才會有這個問題出現, 這是我很想了解的地方, 因為通常版本的更換, 我們都是把舊版的source直接轉上來使用無須二度, 三度修正, 這才能達到最快速的產能, 降低開發的成本, 像這次我又花了四天的時間耗在這裡找問題, 成本高的嚇人啊~~~~
===================引 用 Main Chen 文 章===================
可以用 Log.D(...) 去查查到底那一段程式碼拖慢的.

再用 Android Debug Monitor 去看記錄

參考:
http://www.gesource.jp/weblog/?p=6619
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-09-26 23:45:53 IP:118.169.xxx.xxx 未訂閱
花了很多時間追查, 終於找到一個導致開form非常慢的東西, 我在 on Create中有動態的Create一組Frame, 只要把這組拿掉, 黑畫面只剩一秒, 加進來就要花15秒, 而這個Frame 很簡單, 只有放一個 TSTyleBook , 其他沒有了, 不清楚 xe10對 Frame 做了什麼改變, 在xe8這樣建Frame沒問題, 但xe10就很慢, 不管! 總之花了時間找到問題點, 也不想繼續了解原因, 先避開就好了
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-09-27 15:43:05 IP:183.15.xxx.xxx 訂閱
看了你的问题的解决过程,我想到一个对应这样的问题的普遍思路:把 Delphi 在Project里面自动生成的一堆 Form 的 Application.CreateForm(Form2, TForm2) 这样的句子,全部删除掉,只留下第一个 Form。其它的 Form 都只在需要的时候才 Create。另外,这第一个 Form 也不是你的程式的真正的 Main Form,而仅仅是一个 Flash 的 Form,它显示进度条。然后,才开始由它来 Create 一系列你需要的东西,并在创建过程中,用进度条显示进度。其它的 Form 则是需要的时候才 Create。以前在 Windows 底下,经常这样干。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-09-28 14:42:45 IP:118.169.xxx.xxx 未訂閱
理論上是這樣沒錯, 而我基本上也都是這麼幹的, 這支程式由 XE4延續到XE10, 跨越6個版本, 直到XE7出現splash的功能(xe7), 都未曾改寫過 on create 的內容,  但誠如我上所言, 我實在不知道XE8及XE10在處理Multi-Deivce Form 時的內幕, 何以一個簡單的Frame create會有這麼大的效能差異, 這才是我真正想了解的事情
===================引 用 pcplayer99 文 章===================
看了你的问题的解决过程,我想到一个对应这样的问题的普遍思路:把 Delphi 在Project里面自动生成的一堆 Form 的 Application.CreateForm(Form2, TForm2) 这样的句子,全部删除掉,只留下第一个 Form。其它的 Form 都只在需要的时候才 Create。另外,这第一个 Form 也不是你的程式的真正的 Main Form,而仅仅是一个 Flash 的 Form,它显示进度条。然后,才开始由它来 Create 一系列你需要的东西,并在创建过程中,用进度条显示进度。其它的 Form 则是需要的时候才 Create。以前在 Windows 底下,经常这样干。
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-09-28 19:36:24 IP:120.236.xxx.xxx 訂閱
不清楚它里面做了什么导致运行效率下降厉害。

只不过从一些比较常见的地方,就能知道 Delphi 的很多代码,是一些比较没经验的初学者写的。比如:

1. TLang 里面,默认的 Language 居然没有。也就是没有提供一个 public 的 Method,让它可以回到默认的语言。比如它应该是:TLang.GoDefault 这样的 Method。然后深入去看它的 CODE,发现里面有一个私有的方法,就是当你把它的 Lang 设置为字符串 'en' 时,它就会变成默认的语言。这样写死为 'en' 的字符串的编码风格,很业余啊。

2. ObjectToJson 里面,第一它不是将一个 Object 的 property 变成 JSON string,而是直接转 private 里面的 Field。这个就不说了。比较变态的是,如果你的 Field 的命名,前缀不是 “F” 的话,比如:FHost,FMyName,如果没有这个 F 的话,变成 JSON String 没问题,但它就变不回去了。这种写法,也很业余啊。

So,它的代码质量越来越低,也是可以理解的了。
系統時間:2024-03-28 17:47:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!