Android 應(yīng)用的歡迎界面實現(xiàn)代碼
本文詳細描述了如何實現(xiàn)如下圖中的微信啟動界面. 該類啟動界面的特點是在整個Application的生命周期里, 它只會出現(xiàn)在第一次進入應(yīng)用時, 即便按回退鍵到桌面之后. 使用該類啟動界面的應(yīng)用還有: QQ, QQ音樂, 網(wǎng)易云音樂和微博等等.

知識要點:
AndroidManifest.xml 中 activity 的 android:noHistory 屬性, 即 Intent.FLAG_ACTIVITY_NO_HISTORY
隱式Intent
回退棧(BackStack)
詳細內(nèi)容見官方文檔.
實現(xiàn)代碼:
定義
SplashActivity 為啟動界面
MainActivity 為主界面
AndroidManifest.xml
<!-- 該文件為AndroidManifest.xml, 以下代碼為application下的activity聲明 --> <!-- 啟動界面 --> <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定義中, 我們設(shè)置了SplashActivity為noHistory的屬性為true, 該設(shè)置是告訴系統(tǒng)只要離開該activity, 則請把該activity從回退棧中清除. 另外, 直接在Intent中設(shè)置Intent.FLAG_ACTIVITY_NO_HISTORY標(biāo)識的效果同設(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()了, 因為已經(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);
}
}
上述代碼中, 提供了兩個方法, 第一個方法通過隱式Intent來切換到桌面應(yīng)用(即Launcher), 第二個方法則是將當(dāng)前activity所在的task切換到后臺, 需要注意的是, moveTaskToBack(boolean nonRoot) 的 nonRoot 參數(shù), 如果nonRoot=false, 則要求當(dāng)前activity為棧頂activity, 否則, 調(diào)用將不起任何效果, 如果nonRoot=true, 則忽略nonRoot=false時的條件, 因此, 我們在這里直接設(shè)置nonRoot=true
到這里, 我們可以一直按回退鍵, 直到切換到桌面, 這時SplashActivity已經(jīng)被系統(tǒng)清理了, MainActivity連同它所在的Task已經(jīng)切換到后臺了. 下次我們再啟動應(yīng)用時, 只要MainActivity沒有被系統(tǒng)回收, 那么我們再看到的MainActivity還是退回到桌面前的那個MainActivity.
希望本篇文章能幫助開發(fā)Android應(yīng)用的朋友。
相關(guān)文章
MobLink Android端業(yè)務(wù)場景簡單說明
這篇文章主要介紹了MobLink Android端業(yè)務(wù)場景簡單說明,MobLink的功能實現(xiàn)就是在分享前會將鏈接的參數(shù)信息保存到服務(wù)器,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09
Flutter之Timer實現(xiàn)短信驗證碼獲取60s倒計時功能的代碼
這篇文章主要介紹了Flutter之Timer實現(xiàn)短信驗證碼獲取60s倒計時功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
android實現(xiàn)圖片驗證碼方法解析(自繪控件)
本文主要介紹了android自繪控件的應(yīng)用--實現(xiàn)圖片驗證碼方法案例,具有一定的參考價值,下面跟著小編一起來看下吧2017-01-01
Android連接MySQL數(shù)據(jù)庫詳細教程
在Android應(yīng)用程序中連接 MySQL 數(shù)據(jù)庫可以幫助開發(fā)人員實現(xiàn)更豐富的數(shù)據(jù)管理功能,本教程將介紹如何在Android應(yīng)用程序中使用低版本的MySQL Connector/J驅(qū)動程序來連接MySQL數(shù)據(jù)庫,需要的朋友可以參考下2023-05-05
android h5頁面獲取不到定位數(shù)據(jù)的問題解決
我們經(jīng)常會遇到onGeolocationPermissionsShowPrompt 已經(jīng)執(zhí)行,但仍然沒有獲取到定位數(shù)據(jù)的問題,所以本文給大家介紹了android h5頁面獲取不到定位數(shù)據(jù)的問題解決,需要的朋友可以參考下2024-11-11
Android4.4下MediaProvider無法向外置SD卡中文件寫數(shù)據(jù)的解決方法
這篇文章主要介紹了Android4.4下MediaProvider無法向外置SD卡中文件寫數(shù)據(jù)的解決方法,實例分析了Android4.4下針對讀寫限制的修改技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10

