4.1.2 Android四大組件之- Activity(初窺門徑)

上一節(jié)中我們對Activity一些基本的概念進(jìn)行了了解绍坝,什么是Activity徘意,Activity的生命周期,如何去啟動一個Activity等轩褐,本節(jié)我們繼續(xù)來學(xué)習(xí)Activity椎咧,前面也講了一個App一般都是有多個Activity構(gòu)成的,這就涉及到了多個Activity間數(shù)據(jù)傳遞的問題了把介,那么本節(jié)繼續(xù)學(xué)習(xí)Activity的使用勤讽!另外關(guān)于傳遞集合,對象拗踢,數(shù)組地技,Bitmap的我們會在Intent那里進(jìn)行講解,這里只介紹如何傳遞基本數(shù)據(jù)秒拔!

1. Activity間的數(shù)據(jù)傳遞:

Paste_Image.png

代碼示例:

https://github.com/pifoo/AndroidStudioProjects-Hi/tree/master/activity

2. 多個Activity間的交互(后一個傳回給前一個)

Paste_Image.png

代碼示例:(TODO)
https://github.com/pifoo/AndroidStudioProjects-Hi/tree/master/activity

3. 知曉當(dāng)前是哪個Activity

Paste_Image.png

4. 隨時關(guān)閉所有Activity

有時我們可能會打開了很多個Activity莫矗,突然來個這樣的需求,在某個頁面可以關(guān)掉 所有的Activity并退出程序砂缩!好吧作谚,下面提供一個關(guān)閉所有Activity的方法, 就是用一個list集合來存儲所有Activity!

Paste_Image.png

代碼如下:

public class ActivityCollector {  
    public static LinkedList<Activity> activities = new LinkedList<Activity>();  
    public static void addActivity(Activity activity){  
        activities.add(activity);  
    }  
    public static void removeActivity(Activity activity){  
        activities.remove(activity);  
    }  
    public static void finishAll(){  
        for(Activity activity:activities){  
            if(!activity.isFinishing()){  
                activity.finish();  
            }  
        }  
    }  
}  

5. 完全退出App的方法

上面說的是關(guān)閉所有Activity的庵芭,但是有些時候我們可能想殺死整個App妹懒,連后臺任務(wù)都?xì)⑺?殺得一干二凈的話,可以使用搭配著下述代碼使用:

實現(xiàn)代碼:

/** 
 * 退出應(yīng)用程序 
 */  
public void AppExit(Context context) {  
    try {  
        ActivityCollector.finishAll();  
        ActivityManager activityMgr = (ActivityManager) context  
                .getSystemService(Context.ACTIVITY_SERVICE);  
        activityMgr.killBackgroundProcesses(context.getPackageName());  
        System.exit(0);  
    } catch (Exception ignored) {}  
}

6. 雙擊退出程序的兩種方法:

1)定義一個變量双吆,來標(biāo)識是否退出

// 定義一個變量眨唬,來標(biāo)識是否退出
private static boolean isExit = false;
Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        isExit = false;
    }
};

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (!isExit) {
            isExit = true;
            Toast.makeText(getApplicationContext(), "再按一次退出程序",
                    Toast.LENGTH_SHORT).show();
            // 利用handler延遲發(fā)送更改狀態(tài)信息
            mHandler.sendEmptyMessageDelayed(0, 2000);
        } else {
            exit(this);
        }
        return false;
    }
return super.onKeyDown(keyCode, event);}

2)保存點(diǎn)擊時間

//保存點(diǎn)擊的時間
private long exitTime = 0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if ((System.currentTimeMillis() - exitTime) > 2000) {
            Toast.makeText(getApplicationContext(), "再按一次退出程序",
                    Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
                        exit();
                      }
        return false;
    }
        return super.onKeyDown(keyCode, event);
}

7. 為Activity設(shè)置過場動畫

所謂的過場動畫就是切換到另外的Activity時加上一些切換動畫会前,比如淡入淡出,放大縮小匾竿,左右互推等瓦宜! 當(dāng)然,我們并不在這里詳細(xì)講解動畫岭妖,后面有專門的章節(jié)來講解這個临庇,這里只教大家如何去加載動畫,另外 給大家提供了一些比較常用的過渡動畫昵慌,只要將相關(guān)動畫文件添加到res/anim目錄下假夺,然后下述方法二選一 就可以實現(xiàn)Activity的切換動畫了!

1)方法一:

Paste_Image.png

2) 方法二:

通過style進(jìn)行配置斋攀,這個是全局的哦已卷,就是所有的Activity都會加載這個動畫!
實現(xiàn)代碼如下:

①在style.xml中自定義style:

<!-- 默認(rèn)Activity跳轉(zhuǎn)動畫 -->
<style name="default_animation" mce_bogus="1" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/default_anim_in</item>
    <item name="android:activityOpenExitAnimation">@anim/anim_stay</item>
    <item name="android:activityCloseEnterAnimation">@anim/anim_stay</item>
    <item name="android:activityCloseExitAnimation">@anim/default_anim_out</item>
</style>

解釋:
4個item分別代表:

  • Activity A跳轉(zhuǎn)到Activity B時Activity B進(jìn)入動畫;
  • Activity A跳轉(zhuǎn)到Activity B時Activity A退出動畫;
  • Activity B返回Activity A時Activity A的進(jìn)入動畫
  • Activity B返回Activity A時ActivityB的退出動畫

②然后修改下AppTheme:

<style name="AppTheme" mce_bogus="1" parent="@android:style/Theme.Light">
        <item name="android:windowAnimationStyle">@style/default_animation</item>
        <item name="android:windowNoTitle">true</item>
</style>

③最后在appliction設(shè)置下

<application
   android:icon="@drawable/logo"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >

好的淳蔼,動畫特效就這樣duang一聲設(shè)置好了~

3)其他

好的悼尾,除了上面兩種方法以外,還可以使用TransitionManager來實現(xiàn)肖方,但是需求版本是API 19以上的闺魏, 另外還有一種addOnPreDrawListener的轉(zhuǎn)換動畫,這個用起來還是有點(diǎn)麻煩的俯画,可能不是適合初學(xué)者 這里也不講析桥,最后提供下一些常用的動畫效果打包,選擇需要的特效加入工程即可艰垂! Activity常用過渡動畫.zip

8. Bundle傳遞數(shù)據(jù)的限制

在使用Bundle傳遞數(shù)據(jù)時泡仗,要注意,Bundle的大小是有限制的 < 0.5MB猜憎,如果大于這個值 是會報TransactionTooLargeException異常的C湓酢!胰柑!

9. 使用命令行查看當(dāng)前所有Activity的命令:

使用下述命令即可截亦,前提是你為SDK配置了環(huán)境變量:adb shell dumpsys activity

10. 設(shè)置Activity全屏的方法:

1)代碼隱藏ActionBar

在Activity的onCreate方法中調(diào)用getActionBar.hide();即可

2)通過requestWindowFeature設(shè)置

requestWindowFeature(Window.FEATURE_NO_TITLE); 該代碼需要在setContentView ()之前調(diào)用,不然會報錯<硖帧1廊俊!

3)通過AndroidManifest.xml的theme

在需要全屏的Activity的標(biāo)簽內(nèi)設(shè)置 theme = @android:style/Theme.NoTitleBar.FullScreen

11. onWindowFocusChanged方法妙用

我們先來看下官方對這個方法的介紹:

Paste_Image.png

就是踩官,當(dāng)Activity得到或者失去焦點(diǎn)的時候却桶,就會回調(diào)該方法! 如果我們想監(jiān)控Activity是否加載完畢,就可以用到這個方法了~
想深入了解的可移步到這篇文章: onWindowFocusChanged觸發(fā)簡介

12. 定義對話框風(fēng)格的Activity

在某些情況下颖系,我們可能需要將Activity設(shè)置成對話框風(fēng)格的嗅剖,Activity一般是占滿全屏的,
而Dialog則是占據(jù)部分屏幕的嘁扼!實現(xiàn)起來也很簡單信粮!
直接設(shè)置下Activity的theme:

android:theme="@android:style/Theme.Dialog"

這樣就可以了,當(dāng)然你可以再設(shè)置下標(biāo)題偷拔,小圖標(biāo)蒋院!

//設(shè)置左上角小圖標(biāo)
requestWindowFeature(Window.FEATURE_LEFT_ICON); 
setContentView(R.layout.main); 
getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, android.R.drawable.ic_lion_icon);
//設(shè)置文字:
setTitle(R.string.actdialog_title);  //XML代碼中設(shè)置:android:label="@string/activity_dialog"

總結(jié)

本節(jié)我們又學(xué)習(xí)了一下Activity在實際開發(fā)中的一些常見問題亏钩,相信在實際開發(fā)中會幫到大家的莲绰!
下節(jié)我們來學(xué)習(xí)Activty的棧的概念,以及四種加載模式姑丑!敬請期待謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛤签,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子栅哀,更是在濱河造成了極大的恐慌震肮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件留拾,死亡現(xiàn)場離奇詭異戳晌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痴柔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門沦偎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咳蔚,你說我怎么就攤上這事豪嚎。” “怎么了谈火?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵侈询,是天一觀的道長。 經(jīng)常有香客問我糯耍,道長扔字,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任温技,我火速辦了婚禮啦租,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荒揣。我一直安慰自己篷角,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布系任。 她就那樣靜靜地躺著恳蹲,像睡著了一般虐块。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘉蕾,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天贺奠,我揣著相機(jī)與錄音,去河邊找鬼错忱。 笑死儡率,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的以清。 我是一名探鬼主播儿普,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掷倔!你這毒婦竟也來了眉孩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勒葱,失蹤者是張志新(化名)和其女友劉穎浪汪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凛虽,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡死遭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凯旋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀潭。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瓦阐,靈堂內(nèi)的尸體忽然破棺而出蜗侈,到底是詐尸還是另有隱情,我是刑警寧澤睡蟋,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布踏幻,位于F島的核電站,受9級特大地震影響戳杀,放射性物質(zhì)發(fā)生泄漏该面。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一信卡、第九天 我趴在偏房一處隱蔽的房頂上張望隔缀。 院中可真熱鬧,春花似錦傍菇、人聲如沸猾瘸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牵触。三九已至淮悼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揽思,已是汗流浹背袜腥。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钉汗,地道東北人羹令。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像损痰,于是被迫代替她去往敵國和親福侈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評論 25 707
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程徐钠,因...
    小菜c閱讀 6,424評論 0 17
  • 關(guān)于為什么要寫屬于自己的博客癌刽,我在前一篇文章中也提到了役首。主要是歸納自己這一個時期所學(xué)到的知識尝丐,幫助自己更好的理解,...
    Kevin_Jern閱讀 897評論 0 9
  • 1:上課認(rèn)真聽課跟著老師的思路衡奥,老師講課超棒的哦加油 2:做簡略的筆記
    AnthonykD閱讀 306評論 0 0
  • 有些話說得太白爹袁,卻得到你意想不到的答案或另你不知所措的答案時,你只會覺得更失落和無力感矮固,陌生感失息。
    049e8e02d6b7閱讀 121評論 0 0