Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 應用的歡迎界面實現代碼

Android 應用的歡迎界面實現代碼

編輯:關於Android編程

本文詳細描述了如何實現如下圖中的微信啟動界面. 該類啟動界面的特點是在整個Application的生命周期裡, 它只會出現在第一次進入應用時, 即便按回退鍵到桌面之後. 使用該類啟動界面的應用還有: QQ, QQ音樂, 網易雲音樂和微博等等.

知識要點:

AndroidManifest.xml 中 activity 的 android:noHistory 屬性, 即 Intent.FLAG_ACTIVITY_NO_HISTORY

隱式Intent

回退棧(BackStack) 

詳細內容見官方文檔.

實現代碼:

定義

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定義中, 我們設置了SplashActivity為noHistory的屬性為true, 該設置是告訴系統只要離開該activity, 則請把該activity從回退棧中清除. 另外, 直接在Intent中設置Intent.FLAG_ACTIVITY_NO_HISTORY標識的效果同設置該屬性為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);
 // 此處可以不需要調用finish()了, 因為已經設置了noHistory屬性, 從而使得系統接管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來切換到桌面應用(即Launcher), 第二個方法則是將當前activity所在的task切換到後台, 需要注意的是, moveTaskToBack(boolean nonRoot) 的 nonRoot 參數, 如果nonRoot=false, 則要求當前activity為棧頂activity, 否則, 調用將不起任何效果, 如果nonRoot=true, 則忽略nonRoot=false時的條件, 因此, 我們在這裡直接設置nonRoot=true

到這裡, 我們可以一直按回退鍵, 直到切換到桌面, 這時SplashActivity已經被系統清理了, MainActivity連同它所在的Task已經切換到後台了. 下次我們再啟動應用時, 只要MainActivity沒有被系統回收, 那麼我們再看到的MainActivity還是退回到桌面前的那個MainActivity.

希望本篇文章能幫助開發Android應用的朋友。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved