Android 應用的歡迎介面實現代碼_Android

來源:互聯網
上載者:User

本文詳細描述了如何?如下圖中的微信啟動介面. 該類啟動介面的特點是在整個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應用的朋友。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.