一.
網(wǎng)站設(shè)計(jì)制作過(guò)程拒絕使用模板建站;使用PHP+MYSQL原生開(kāi)發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營(yíng)了十多年的創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。
游泳的基本詞匯
把臉埋入水中(詞組):
put
face
in
water
吐氣泡(詞組):
blow
bubbles
漂?。▌?dòng)詞):
float
游泳(動(dòng)詞):
swim,
bathe
趟水(動(dòng)詞):wade
池中嬉戲:
play
in
pool
跳水(動(dòng)詞):dive
跳入泳池:jump
in
pool
技巧:
technique
二.
游泳的競(jìng)技比賽用詞
strokes
(stroke的復(fù)數(shù))用作表示
methods
of
swimming
游泳方法,包括:
1.蝶泳:Butterfly
或簡(jiǎn)稱
fly
海豚式踢腿動(dòng)作被稱為
dolphin
kick
(kick=踢)
2.仰泳:Backstroke,
racing
backstroke,
或
back
crawl
踢腿動(dòng)作被稱為
淺打水:flutter
kick
3.蛙泳:Breaststroke
蛙式踢腿動(dòng)作
frog
kick,
modified
frog
kick
or
whip
kick
4.自由泳:Freestyle,
front
crawl
或
forward
crawl
二十世紀(jì)初有兩種提高速度的發(fā)展
Australian
Crawl
(澳大利亞式)與
American
crawl
(美國(guó)式)
5.個(gè)人混合泳:Individual
Medley
(IM)
指一個(gè)人連續(xù)游上述四種樣式,每種姿勢(shì)距離為100,200
或400米
6.四人接力:relay
每個(gè)人的賽程叫
leg,最后一位選手被稱為anchor
三.
其他:知識(shí)
花絮
..側(cè)泳:Sidestroke
剪刀式踢腿
scissors
kick
..狗爬式游泳:
Dog
Paddle
..爬泳:Trudgen
Crawl
..“溺死的蛾子”
=
通常形容人們第一次嘗試蝶泳的樣子:Drowning
moth
..踏水:Treading
water
不是一種姿勢(shì)。它是一套使游泳者在水中身體保持豎直的腿部動(dòng)作。
水球運(yùn)動(dòng)員常依靠它。水球:Water
polo
運(yùn)動(dòng)員們:players
..同游表演:Synchronized
swimming
被稱為
=
花樣游泳:water
ballet
成對(duì)表演(2-8人)
..游泳道的分界線:lane
lines
有時(shí)是人的“救生索”
lifelines
通常不許人靠在上面的原因有四:
1)他們不結(jié)實(shí),會(huì)斷
2)救生員會(huì)認(rèn)為你有危險(xiǎn)
救生員:lifeguard
3)真正有困難的人更不容易及時(shí)扶到了
4)把它壓下去,它失去了邊界警示的功能
四.大家平時(shí)都接觸的(實(shí)用的:)
女游泳衣:
swimsuit
男式游泳短褲:
swimming
trunks
(永遠(yuǎn)用復(fù)數(shù)形式,因?yàn)橛狙潈蓷l腿)
游泳帽:swimcap
游泳鏡:
swimming
防霧:
anti-fog
防紫外線鏡片:
UV
Protection
Lens
游泳裝備:
swim
gear
踢水板:
kickboard
雙手扶上面,腿來(lái)踢水
漂浮物:
floats
綁胳膊上的
耳/鼻夾子:ear/nose
clip
腳蹼:swim
fins
秒表:stopwatch
(小孩子帶到水中的)泳池玩具:
pool
toy
穿上泳衣
(女孩):put
on
swimsuit
(男孩):put
on
swimming
trunks
梳子:
hairbrush
淋浴(名詞):
shower
香波(名詞):
shampoo
洗頭(動(dòng)詞):
shampoo
坐在池邊:
sit
on
edge
從池中出來(lái):
get
out
of
pool
池邊地滑:
slippery
by
pool
擦干身體:
dry
off
穿上衣服:
get
dressed
游泳池:
swimming
pool
波浪池:
wave
pool
兒童池(淺水池):
wading
pool
水上滑梯:water
slide
泳道:
lane
把泳道分開(kāi)的漂浮線:lane
lines
環(huán)繞游泳:Circle
Swim
是
游泳禮節(jié):lane
etiquette
兩人以上在同一泳道,始終貼近身體右邊的泳道線,并間隔五秒的距離
不在池中方便:
don't
pee
in
pool
救生衣:
life
jacket
救生圈:ring
buoy
救生員:
lifeguard
游泳教練:
swimming
instructor,coach
背景:原生時(shí)間緊沒(méi)時(shí)間開(kāi)發(fā)任務(wù)量大的任務(wù),而前端又閑著打醬油
方案:原生+webview混合開(kāi)發(fā)
缺點(diǎn):對(duì)于比較復(fù)雜的頁(yè)面,webview在性能上力不從心;且與原生通信頻繁也增加了隱藏的工作量
優(yōu)點(diǎn):能自帶支持動(dòng)態(tài)更新(js),能充分利用人力
webview是一個(gè)基于webkit引擎,展示web頁(yè)面的控件。Android上的webview在低版本和高版本采用了不同的webkit版本內(nèi)核,Android4.4(19)后直接使用了Chrome內(nèi)核;WebView控件功能強(qiáng)大,除了具有一般View的屬性和設(shè)置外,還可以對(duì)url請(qǐng)求,頁(yè)面加載,渲染,頁(yè)面交互進(jìn)行強(qiáng)大的處理。一般來(lái)說(shuō)webview可單獨(dú)使用,也可聯(lián)合其工具類一起使用
移動(dòng)應(yīng)用的主體是webview,主要以網(wǎng)頁(yè)語(yǔ)言編寫,穿插Native功能的Hybrid App開(kāi)發(fā)類型。激活webview為活躍狀態(tài),能正常執(zhí)行網(wǎng)頁(yè)的響應(yīng);當(dāng)webview 的頁(yè)面被失去焦點(diǎn)切換到后臺(tái)不可見(jiàn)狀態(tài)onPause時(shí),需要通知自己暫停所有的動(dòng)作,比如DOM的解析,plugin的執(zhí)行,JavaScript的執(zhí)行等
1,顯示和渲染web頁(yè)面
2,直接使用本地assets或者網(wǎng)絡(luò)上的html文件作為布局
3,可和JavaScript進(jìn)行互相調(diào)用
1,直接在布局文件里寫死
2,動(dòng)態(tài)添加進(jìn)viewgroup中
注:不管以哪種方式,都必須注意webview的銷毀,否則可能會(huì)造成內(nèi)存泄漏最終導(dǎo)致內(nèi)存溢出crash
下面是WebView的一些常用的方法列舉,一些已經(jīng)過(guò)時(shí)的方法未列出
下面是WebSettings的一些常用的方法列舉,一些已經(jīng)過(guò)時(shí)的方法就沒(méi)有寫出來(lái)了
一般不管是動(dòng)態(tài)生成還是xml寫死,只要處理好了引用持有問(wèn)題,就能有效的避免內(nèi)存泄漏;下面是我嘗試的方案,在工具類WebViewUtils.java里封裝好,在activity銷毀的時(shí)候調(diào)用
1,清除webview緩存和記錄
2,可以設(shè)置不啟用緩存
3,H5的一些控件標(biāo)簽不支持導(dǎo)致的白屏
4,xml啟用軟件加速
5,通過(guò)menifest的來(lái)配置,在目標(biāo)webview的activity設(shè)置
解決方案:
解決方案:
解決方案:
上一篇: Flutter入門-01-工程創(chuàng)建目錄介紹
使用的不同。
相比來(lái)說(shuō)ruffle的使用更加的方便簡(jiǎn)單,不需要過(guò)多復(fù)雜的使用技巧,使用更加的方便快捷。
先制作一個(gè)縱軸滾動(dòng)的pageview
然后我們利用time組件實(shí)現(xiàn)自動(dòng)輪播,這里面有個(gè)小技巧,掌握了這個(gè)小技巧就可以做無(wú)縫的循環(huán)播放,比如我有 a b c三項(xiàng),我們?cè)跇?gòu)造pageview item的時(shí)候人為的構(gòu)造成a b c a,在c的后面加上a,當(dāng)c滾動(dòng)到a的時(shí)候,比如每次動(dòng)畫變換時(shí)間是500毫秒,那么就延遲500好秒快速的跳到第一個(gè)a頁(yè)面,剛好等它滾動(dòng)完就快速變換
在視覺(jué)上完全看不出來(lái),這樣就造成了無(wú)縫循環(huán)滾動(dòng)的假象,同理如果你想反方向也可以無(wú)縫循環(huán)滾動(dòng),那么你在構(gòu)造pageview item的時(shí)候就可以 這樣c a b c a構(gòu)造,只要控制好邏輯,完全沒(méi)有任何問(wèn)題
Flutter 里的 BuildContext 相信大家都不會(huì)陌生,雖然它叫 Context,但是它實(shí)際是 Element 的抽象對(duì)象,而在 Flutter 里,它主要來(lái)自于 ComponentElement 。
關(guān)于 ComponentElement 可以簡(jiǎn)單介紹一下,在 Flutter 里根據(jù) Element 可以簡(jiǎn)單地被歸納為兩類:
所以一般情況下,我們?cè)? build 方法或者 State 里獲取到的 BuildContext 其實(shí)就是 ComponentElement 。
那使用 BuildContext 有什么需要注意的問(wèn)題 ?
首先如下代碼所示,在該例子里當(dāng)用戶點(diǎn)擊 FloatingActionButton 的時(shí)候,代碼里做了一個(gè) 2秒的延遲,然后才調(diào)用 pop 退出當(dāng)前頁(yè)面。
正常情況下是不會(huì)有什么問(wèn)題,但是當(dāng)用戶在點(diǎn)擊了 FloatingActionButton 之后,又馬上點(diǎn)擊了 AppBar 返回退出應(yīng)用,這時(shí)候就會(huì)出現(xiàn)以下的錯(cuò)誤提示。
可以看到此時(shí) log 說(shuō),Widget 對(duì)應(yīng)的 Element 已經(jīng)不在了,因?yàn)樵? Navigator.of(context) 被調(diào)用時(shí), context 對(duì)應(yīng)的 Element 已經(jīng)隨著我們的退出銷毀。
一般情況下處理這個(gè)問(wèn)題也很簡(jiǎn)單, 那就是增加 mounted 判斷,通過(guò) mounted 判斷就可以避免上述的錯(cuò)誤 。
上面代碼里的 mounted 標(biāo)識(shí)位來(lái)自于 State , 因?yàn)? State 是依附于 Element 創(chuàng)建,所以它可以感知 Element 的生命周期 ,例如 mounted 就是判斷 _element != null; 。
那么到這里我們收獲了一個(gè)小技巧: 使用 BuildContext 時(shí),在必須時(shí)我們需要通過(guò) mounted 來(lái)保證它的有效性 。
那么單純使用 mounted 就可以滿足 context 優(yōu)化的要求了嗎 ?
如下代碼所示,在這個(gè)例子里:
由于在 5 秒之內(nèi),Item 被劃出了屏幕,所以對(duì)應(yīng)的 Elment 其實(shí)是被釋放了,從而由于 mounted 判斷, SnackBar 不會(huì)被彈出。
那如果假設(shè)需要在開(kāi)發(fā)時(shí)展示點(diǎn)擊數(shù)據(jù)上報(bào)的結(jié)果,也就是 Item 被釋放了還需要彈出,這時(shí)候需要如何處理 ?
我們知道不管是 ScaffoldMessenger.of(context) 還是 Navigator.of(context) ,它本質(zhì)還是通過(guò) context 去往上查找對(duì)應(yīng)的 InheritedWidget 泛型,所以其實(shí)我們可以提前獲取。
所以,如下代碼所示,在 Future.delayed 之前我們就通過(guò) ScaffoldMessenger.of(context); 獲取到 sm 對(duì)象,之后就算你直接退出當(dāng)前的列表頁(yè)面,5秒過(guò)后 SnackBar 也能正常彈出。
為什么頁(yè)面銷毀了,但是 SnackBar 還能正常彈出 ?
因?yàn)榇藭r(shí)通過(guò) of(context); 獲取到的 ScaffoldMessenger 是存在 MaterialApp 里,所以就算頁(yè)面銷毀了也不影響 SnackBar 的執(zhí)行。
但是如果我們修改例子,如下代碼所示,在 Scaffold 上面多嵌套一個(gè) ScaffoldMessenger ,這時(shí)候在 Item 里通過(guò) ScaffoldMessenger.of(context) 獲取到的就會(huì)是當(dāng)前頁(yè)面下的 ScaffoldMessenger 。
這種情況下我們只能保證Item 不可見(jiàn)的時(shí)候 SnackBar 還能正常彈出, 而如果這時(shí)候我們直接退出頁(yè)面,還是會(huì)出現(xiàn)以下的錯(cuò)誤提示,因?yàn)? ScaffoldMessenger 也被銷毀了 。
所以到這里我們收獲第二個(gè)小技巧: 在異步操作里使用 of(context) ,可以提前獲取,之后再做異步操作,這樣可以盡量保證流程可以完整執(zhí)行 。
既然我們說(shuō)到通過(guò) of(context) 去獲取上層共享往下共享的 InheritedWidget ,那在哪里獲取就比較好 ?
還記得前面的 log 嗎?在第一個(gè)例子出錯(cuò)時(shí),log 里就提示了一個(gè)方法,也就是 State 的 didChangeDependencies 方法。
為什么是官方會(huì)建議在這個(gè)方法里去調(diào)用 of(context) ?
首先前面我們一直說(shuō),通過(guò) of(context) 獲取到的是 InheritedWidget ,而 當(dāng) InheritedWidget 發(fā)生改變時(shí),就是通過(guò)觸發(fā)綁定過(guò)的 Element 里 State 的 didChangeDependencies 來(lái)觸發(fā)更新, 所以在 didChangeDependencies 里調(diào)用 of(context) 有較好的因果關(guān)系 。
那我能在 initState 里提前調(diào)用嗎 ?
當(dāng)然不行,首先如果在 initState 直接調(diào)用如 ScaffoldMessenger.of(context).showSnackBar 方法,就會(huì)看到以下的錯(cuò)誤提示。
這是因?yàn)?Element 里會(huì)判斷此時(shí)的 _StateLifecycle 狀態(tài),如果此時(shí)是 _StateLifecycle.created 或者 _StateLifecycle.defunct ,也就是在 initState 和 dispose ,是不允許執(zhí)行 of(context) 操作。
當(dāng)然,如果你硬是想在 initState 下調(diào)用也行,增加一個(gè) Future 執(zhí)行就可以成功執(zhí)行
那我在 build 里直接調(diào)用不行嗎 ?
直接在 build 里調(diào)用肯定可以,雖然 build 會(huì)被比較頻繁執(zhí)行,但是 of(context) 操作其實(shí)就是在一個(gè) map 里通過(guò) key - value 獲取泛型對(duì)象,所以對(duì)性能不會(huì)有太大的影響。
真正對(duì)性能有影響的是 of(context) 的綁定數(shù)量和獲取到對(duì)象之后的自定義邏輯 ,例如你通過(guò) MediaQuery.of(context).size 獲取到屏幕大小之后,通過(guò)一系列復(fù)雜計(jì)算來(lái)定位你的控件。
例如上面這段代碼,可能會(huì)導(dǎo)致鍵盤在彈出的時(shí)候,雖然當(dāng)前頁(yè)面并沒(méi)有完全展示,但是也會(huì)導(dǎo)致你的控件不斷重新計(jì)算從而出現(xiàn)卡頓。
所以到這里我們又收獲了一個(gè)小技巧: 對(duì)于 of(context) 的相關(guān)操作邏輯,可以盡量放到 didChangeDependencies 里去處理 。