irontec 推出了一個(gè)開(kāi)源項(xiàng)目 PHP for Android (PFA),把php帶到Android平臺(tái)上。現(xiàn)在我們來(lái)介紹一下。
在安卓項(xiàng)目開(kāi)發(fā)中,我們?cè)趩?dòng)app的時(shí)候,屏幕會(huì)出現(xiàn)一段時(shí)間的白屏或者黑屏,不同設(shè)備時(shí)間長(zhǎng)短不同。很影響用戶體驗(yàn),所以我們很有必要對(duì)其進(jìn)行優(yōu)化。
當(dāng)我們啟動(dòng)一個(gè)APP時(shí),如果該app所屬的Application還沒(méi)有在后臺(tái)運(yùn)行的話,系統(tǒng)會(huì)首先創(chuàng)建一個(gè)新的進(jìn)程去運(yùn)行這個(gè)APP,但進(jìn)程的創(chuàng)建與初始化都是需要時(shí)間的,在這個(gè)動(dòng)作完成之前,如果初始化的時(shí)間過(guò)長(zhǎng),屏幕上可能沒(méi)有任何動(dòng)靜,用戶會(huì)以為沒(méi)有點(diǎn)到APP而再次去點(diǎn)擊應(yīng)用圖標(biāo),這極大的降低了用戶體驗(yàn),因此Android需要及時(shí)做出反饋去響應(yīng)用戶的點(diǎn)擊啟動(dòng)動(dòng)作,這就有了StartingWindow(也稱之為PreviewWindow的預(yù)覽窗口)的出現(xiàn),這樣看起來(lái)就像App已經(jīng)啟動(dòng)起來(lái)了,只是數(shù)據(jù)內(nèi)容還沒(méi)有初始化好。
StartingWindow一般出現(xiàn)在應(yīng)用程序進(jìn)程創(chuàng)建并初始化成功前,目的是告訴用戶,系統(tǒng)已經(jīng)接受到操作,正在響應(yīng),在程序初始化完成后繪制好啟動(dòng)頁(yè)UI,會(huì)同時(shí)移除這個(gè)窗口,所以他只是一個(gè)臨時(shí)的窗口。
一般情況下我們會(huì)對(duì)Application和Activity設(shè)置Theme,系統(tǒng)會(huì)根據(jù)設(shè)置的Theme初始化StartingWindow。Window布局的頂層是DecorView,StartingWindow顯示一個(gè)空DecorView,但是會(huì)給這個(gè)DecorView應(yīng)用這個(gè)Activity指定的Theme中設(shè)置的背景色,如果這個(gè)Activity沒(méi)有指定Theme就用Application的Theme(Application系統(tǒng)要求必須設(shè)置Theme),我們?cè)赟tyle中的設(shè)置就決定了顯示的是白屏還是黑屏,如下:
<application // .... android:theme="@style/AppTheme">
如果我們的AppTheme像如下定義的一樣使用了Light主題,那么顯示就是白屏,反之如果使用Black主題,那么顯示就是黑屏:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
1、首先在res/drawable下新建一個(gè)layer-list,名字隨便取,比如splash.xml:
layer-list的編寫參考:https://www.jb51.net/article/130850.htm
<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 背景顏色 --> <item android:drawable="@color/white" /> <item> <!-- 圖片 --> <bitmap android:gravity="center" android:src="@drawable/wel_page" /> </item></layer-list>
layer-list大家都會(huì)寫吧,上面是背景顏色,下面是一張圖,這張圖可以是全屏的圖,可以是一張小圖。如果是全屏的圖,那上面的顏色也可以不用設(shè)置,如果是小圖,就要指定下顏色了,并且可以指定圖片所在位置。
2、給主題設(shè)置Window背景:可以用我們上面的layer-list作為背景,當(dāng)然也可以設(shè)置個(gè)全屏的圖片。
<style name="SplashTheme" parent="AppBaseTheme"> <!-- 歡迎頁(yè)背景引用剛才寫好的 --> <item name="android:windowBackground">@drawable/splash</item> <item name="android:windowFullscreen">true</item> <!-- <item name="android:windowIsTranslucent">true</item> --> <!-- 透明背景不要了 --></style>
3、在AndroidManifest.xml中定義SplashActivity的theme為SplashTheme:這里注意application使用的theme是AppTheme,而SplashActivity使用的主題是SplashTheme。這樣做的效果是只要SplashActivity使用StartAppTheme主題,其他Activity都是用AppTheme主題哦。
<activity android:name=".SplashActivity" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter></activity>
4、SplashActivity的實(shí)現(xiàn),在onCreate()中直接啟動(dòng)你的MainActivity即可,沒(méi)有setContentView():
public class SplashActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_load_sir); new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this,MainActivity.class); startActivity(intent); finish(); } }, 3000); } }
在上面第二步中提到可以不使用layer-list,直接設(shè)置背景為圖片,但是不推薦使用直接使用.png圖片作為背景的方式,因?yàn)槠聊怀叽缣?,圖片顯示會(huì)變形,如果可以我們也可以使用.9.png的背景圖來(lái)實(shí)現(xiàn),但是使用圖片的方式存在一個(gè)缺陷就是splash圖片是寫在theme中的,圖片的內(nèi)存釋放不掉,而使用layer-list比較節(jié)省內(nèi)存。
相關(guān)推薦:
Android?Animation_html/css_WEB-ITnose
以上就是啟動(dòng)頁(yè)進(jìn)入時(shí)有短暫黑屏或白屏現(xiàn)象的終極解決方案的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)