国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android 應(yīng)用的歡迎界面實(shí)現(xiàn)代碼

2019-12-12 05:52:33
字體:
供稿:網(wǎng)友

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

知識(shí)要點(diǎn):

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

隱式Intent

回退棧(BackStack) 

詳細(xì)內(nèi)容見官方文檔.

實(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)只要離開該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è)方法通過隱式Intent來切換到桌面應(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沒有被系統(tǒng)回收, 那么我們?cè)倏吹降腗ainActivity還是退回到桌面前的那個(gè)MainActivity.

希望本篇文章能幫助開發(fā)Android應(yīng)用的朋友。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 修武县| 南溪县| 辽中县| 平顶山市| 常宁市| 郸城县| 逊克县| 平南县| 简阳市| 思茅市| 阳谷县| 双辽市| 黔西| 调兵山市| 拜泉县| 曲松县| 光泽县| 庄浪县| 章丘市| 焉耆| 海盐县| 天水市| 宝丰县| 江门市| 巫山县| 梁平县| 广丰县| 福安市| 巴林左旗| 马尔康县| 长顺县| 巫溪县| 屏边| 郎溪县| 娱乐| 太谷县| 龙南县| 鸡西市| 涞源县| 甘德县| 广元市|