Android 應(yīng)用的歡迎界面實(shí)現(xiàn)代碼
本文詳細(xì)描述了如何實(shí)現(xiàn)如下圖中的微信啟動(dòng)界面. 該類(lèi)啟動(dòng)界面的特點(diǎn)是在整個(gè)Application的生命周期里, 它只會(huì)出現(xiàn)在第一次進(jìn)入應(yīng)用時(shí), 即便按回退鍵到桌面之后. 使用該類(lèi)啟動(dòng)界面的應(yīng)用還有: QQ, QQ音樂(lè), 網(wǎng)易云音樂(lè)和微博等等.
知識(shí)要點(diǎn):
AndroidManifest.xml 中 activity 的 android:noHistory 屬性, 即 Intent.FLAG_ACTIVITY_NO_HISTORY
隱式Intent
回退棧(BackStack)
詳細(xì)內(nèi)容見(jiàn)官方文檔.
實(shí)現(xiàn)代碼:
定義
SplashActivity 為啟動(dòng)界面
MainActivity 為主界面
AndroidManifest.xml
<!-- 該文件為AndroidManifest.xml, 以下代碼為application下的activity聲明 --> <!-- 啟動(dòng)界面 --> <activity android:name=".SplashActivity" android:label="@string/app_name" android:noHistory="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- 主界面 --> <activity android:name=".MainActivity" android:label="@string/app_name"> </activity>
特別需要注意的是, 在上述Activity-XML定義中, 我們?cè)O(shè)置了SplashActivity為noHistory的屬性為true, 該設(shè)置是告訴系統(tǒng)只要離開(kāi)該activity, 則請(qǐng)把該activity從回退棧中清除. 另外, 直接在Intent中設(shè)置Intent.FLAG_ACTIVITY_NO_HISTORY標(biāo)識(shí)的效果同設(shè)置該屬性為true的.
SplashActivity.java
import ... public abstract class SplashActivity extends Activity implements Runnable { final Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); mHandler.postDelayed(this, 2000); } @Override public void run() { Intent intent = new Intent(this, MainActivtiy.class); startActivity(intent); // 此處可以不需要調(diào)用finish()了, 因?yàn)橐呀?jīng)設(shè)置了noHistory屬性, 從而使得系統(tǒng)接管finish操作 } }
MainActivity.java
import ... public abstract class MainActivity extends Activity { ... @Override public void onBackPressed() { // 方法 1: goto the default launcher. It's not recommended. // Intent i = new Intent(Intent.ACTION_MAIN); // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // i.addCategory(Intent.CATEGORY_HOME); // startActivity(i); // 方法 2: goto the default launcher. It's recommended. moveTaskToBack(true); } }
上述代碼中, 提供了兩個(gè)方法, 第一個(gè)方法通過(guò)隱式Intent來(lái)切換到桌面應(yīng)用(即Launcher), 第二個(gè)方法則是將當(dāng)前activity所在的task切換到后臺(tái), 需要注意的是, moveTaskToBack(boolean nonRoot) 的 nonRoot 參數(shù), 如果nonRoot=false, 則要求當(dāng)前activity為棧頂activity, 否則, 調(diào)用將不起任何效果, 如果nonRoot=true, 則忽略nonRoot=false時(shí)的條件, 因此, 我們?cè)谶@里直接設(shè)置nonRoot=true
到這里, 我們可以一直按回退鍵, 直到切換到桌面, 這時(shí)SplashActivity已經(jīng)被系統(tǒng)清理了, MainActivity連同它所在的Task已經(jīng)切換到后臺(tái)了. 下次我們?cè)賳?dòng)應(yīng)用時(shí), 只要MainActivity沒(méi)有被系統(tǒng)回收, 那么我們?cè)倏吹降腗ainActivity還是退回到桌面前的那個(gè)MainActivity.
希望本篇文章能幫助開(kāi)發(fā)Android應(yīng)用的朋友。
相關(guān)文章
Android 畫(huà)一個(gè)太極圖實(shí)例代碼
這篇文章主要介紹了Android 畫(huà)一個(gè)太極圖實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09android項(xiàng)目從Eclipse遷移到Android studio中常見(jiàn)問(wèn)題解決方法
android項(xiàng)目從Eclipse遷移到Android studio中經(jīng)常會(huì)遇到一些問(wèn)題,本文提供了Android studio使用中常見(jiàn)問(wèn)題解決方法2018-03-03解決Android studio 2.3升級(jí)到Android studio 3.0 后apt報(bào)錯(cuò)問(wèn)題
原來(lái)項(xiàng)目在Android studio 2.3一切正常,升級(jí)到了3.0之后報(bào)錯(cuò),不支持apt了,其實(shí)解決這個(gè)問(wèn)題很簡(jiǎn)單,只需要修改兩點(diǎn)內(nèi)容就可以,下面腳本之家小編帶領(lǐng)大家通過(guò)本文學(xué)習(xí)吧2017-12-12monkeyrunner之安卓開(kāi)發(fā)環(huán)境搭建教程(1)
這篇文章主要介紹了monkeyrunner之安卓開(kāi)發(fā)環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android開(kāi)發(fā)中使用WebView控件瀏覽網(wǎng)頁(yè)的方法詳解
這篇文章主要介紹了Android開(kāi)發(fā)中使用WebView控件瀏覽網(wǎng)頁(yè)的方法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了Android WebView控件的功能、布局、設(shè)置、常用方法及相關(guān)操作技巧,需要的朋友可以參考下2017-10-102021最新Android筆試題總結(jié)美團(tuán)Android崗職能要求
這篇文章主要介紹了2021最新Android筆試題總結(jié)以及美團(tuán)Android崗職能要求,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Android開(kāi)發(fā)之微信底部菜單欄實(shí)現(xiàn)的幾種方法匯總
這篇文章主要介紹了Android開(kāi)發(fā)之微信底部菜單欄實(shí)現(xiàn)的幾種方法,下面小編把每種方法通過(guò)實(shí)例逐一給大家介紹,需要的朋友可以參考下2016-09-09Android使用RSA加密實(shí)現(xiàn)接口調(diào)用時(shí)的校驗(yàn)功能
這篇文章主要介紹了Android+Java使用RSA加密實(shí)現(xiàn)接口調(diào)用時(shí)的校驗(yàn)功能,幫助大家更好的利用Android進(jìn)行開(kāi)發(fā),感興趣的朋友可以了解下2020-12-12Android 通過(guò)jni返回Mat數(shù)據(jù)類(lèi)型方法
今天小編就為大家分享一篇Android 通過(guò)jni返回Mat數(shù)據(jù)類(lèi)型方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08