Activity

生命周期

image

onCreate:create表示創(chuàng)建,這是Activity生命周期的第一個(gè)方法导饲,也是我們?cè)赼ndroid開(kāi)發(fā)中接觸的最多的生命周期方法蝙泼。它本身的作用是進(jìn)行Activity的一些初始化工作寥粹,比如使用setContentView加載布局,對(duì)一些控件和變量進(jìn)行初始化等轴踱。但也有很多人將很多與初始化無(wú)關(guān)的代碼放在這症脂,其實(shí)這是不規(guī)范的。此時(shí)Activity還在后臺(tái)淫僻,不可見(jiàn)诱篷。所以動(dòng)畫(huà)不應(yīng)該在這里初始化,因?yàn)榭床坏健?/p>

onStart:start表示啟動(dòng)嘁傀,這是Activity生命周期的第二個(gè)方法兴蒸。此時(shí)Activity已經(jīng)可見(jiàn)了,但是還沒(méi)出現(xiàn)在前臺(tái)细办,我們還看不到橙凳,無(wú)法與Activity交互。其實(shí)將Activity的初始化工作放在這也沒(méi)有什么問(wèn)題笑撞,放在onCreate中是由于官方推薦的以及我們開(kāi)發(fā)的習(xí)慣岛啸。

onResume:resume表示繼續(xù)、重新開(kāi)始茴肥,這名字和它的職責(zé)也相同坚踩。此時(shí)Activity經(jīng)過(guò)前兩個(gè)階段的初始化已經(jīng)蓄勢(shì)待發(fā)。Activity在這個(gè)階段已經(jīng)出現(xiàn)在前臺(tái)并且可見(jiàn)了瓤狐。這個(gè)階段可以打開(kāi)獨(dú)占設(shè)備

onPause:pause表示暫停瞬铸,當(dāng)Activity要跳到另一個(gè)Activity或應(yīng)用正常退出時(shí)都會(huì)執(zhí)行這個(gè)方法。此時(shí)Activity在前臺(tái)并可見(jiàn)础锐,我們可以進(jìn)行一些輕量級(jí)的存儲(chǔ)數(shù)據(jù)和去初始化的工作嗓节,不能太耗時(shí),因?yàn)樵谔D(zhuǎn)Activity時(shí)只有當(dāng)一個(gè)Activity執(zhí)行完了onPause方法后另一個(gè)Activity才會(huì)啟動(dòng)皆警,而且android中指定如果onPause在500ms即0.5秒內(nèi)沒(méi)有執(zhí)行完畢的話就會(huì)強(qiáng)制關(guān)閉Activity拦宣。從生命周期圖中發(fā)現(xiàn)可以在這快速重啟,但這種情況其實(shí)很罕見(jiàn),比如用戶切到下一個(gè)Activity的途中按back鍵快速得切回來(lái)鸵隧。

onStop:stop表示停止绸罗,此時(shí)Activity已經(jīng)不可見(jiàn)了,但是Activity對(duì)象還在內(nèi)存中豆瘫,沒(méi)有被銷(xiāo)毀珊蟀。這個(gè)階段的主要工作也是做一些資源的回收工作。

onDestroy:destroy表示毀滅靡羡,這個(gè)階段Activity被銷(xiāo)毀系洛,不可見(jiàn)俊性,我們可以將還沒(méi)釋放的資源釋放略步,以及進(jìn)行一些回收工作。

onRestart:restart表示重新開(kāi)始定页,Activity在這時(shí)可見(jiàn)趟薄,當(dāng)用戶按Home鍵切換到桌面后又切回來(lái)或者從后一個(gè)Activity切回前一個(gè)Activity就會(huì)觸發(fā)這個(gè)方法。這里一般不做什么操作典徊。

pointer

  • onStart方法和onResume方法有什么區(qū)別(onStop和onPause)

是否在前臺(tái)杭煎。onStart方法中Activity可見(jiàn)但不在前臺(tái),不可交互卒落,而在onResume中在前臺(tái)羡铲。

  • A activity打開(kāi)B activity A 的onpause()和B的onResume哪個(gè)先執(zhí)行

先A onPause()然后再執(zhí)行B的onResume

  • onSaveInstanceState和onRestoreInstanceState的作用

橫屏操作發(fā)生,導(dǎo)致activity被銷(xiāo)毀時(shí)儡毕,會(huì)調(diào)用onSaveInstanceState也切,可以在其中存取數(shù)據(jù),恢復(fù)時(shí)會(huì)調(diào)用onRestoreInstanceState獲取bundle數(shù)據(jù)(非空)設(shè)置它腰湾,oncreate中也可以獲取bundle數(shù)據(jù)設(shè)置它雷恃,但是oncreate中不一定是非空的

  • 使activity不會(huì)因?yàn)槠聊恍D(zhuǎn)而被重新創(chuàng)建的方法

給activity設(shè)置android:configchanges="orientation|screenSize",configchanges的其他屬性


image

LaunchMode

  • Standard:新建一個(gè)實(shí)例,進(jìn)入創(chuàng)建它的activity的棧中

  • singleTop:棧頂復(fù)用模式费坊,如果在棧頂就不會(huì)被重新創(chuàng)建倒槐,它的onNewIntent方法會(huì)被調(diào)用,這個(gè)activity的onCreate和onStart不會(huì)被調(diào)用

  • singleTask:棧內(nèi)復(fù)用附井,需要的任務(wù)棧中有該實(shí)例時(shí)讨越,就不創(chuàng)建新實(shí)例(需要的任務(wù)棧指的事TaskAffinity屬性,他可以指定任務(wù)棧的名字永毅,默認(rèn)是包名)

  • singleInstance:一個(gè)activity獨(dú)自占據(jù)一個(gè)任務(wù)棧

指定LaunchMode的方法

//manifest中的activity配置
 android:launchMode="singleTask"
//添加flag標(biāo)簽
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Flags

  • FLAG_ACTIVITY_NEW_TASK :

對(duì)應(yīng)singleTask模式

  • FLAG_ACTIVITY_SINGLE_TOP:

對(duì)應(yīng)singleTop模式

  • FLAG_ACTIVITY_CLEAR_TOP:

如果設(shè)置了此標(biāo)志位把跨,并且被啟動(dòng)的Activity已經(jīng)存在于這個(gè)Task中,則不會(huì)啟動(dòng)一個(gè)該Activity的新的實(shí)例卷雕,而是彈出在Task中节猿,該Activity上的所有Activity。同時(shí),這個(gè)intent作為一個(gè)新的intent會(huì)傳遞給該Activity滨嘱。

  • FLAG_ACTIVITY_CLEAR_TASK:

如果設(shè)置了這個(gè)標(biāo)志的intent通過(guò)Context.startActivity()去啟動(dòng)某個(gè)Activity峰鄙,那么該標(biāo)志會(huì)導(dǎo)致任何與此獲得弄個(gè)相關(guān)聯(lián)的task被清空,在這個(gè)活動(dòng)啟動(dòng)之前太雨。然后吟榴,該活動(dòng)就會(huì)變成根Activity,之前的活動(dòng)全被銷(xiāo)毀了囊扳。這個(gè)標(biāo)志只能和FLAG_ACTIVITY_NEW_TASK在一起使用

IntentFilter

 <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
        <data android:mimeType="image/*"/>
    </intent-filter>

需要同時(shí)匹配action吩翻,category,data才能成功隱式啟動(dòng)activity

action

系統(tǒng)預(yù)定義了一些action锥咸,像android.intent.action.SEND可以用來(lái)分享信息狭瞎,其他應(yīng)用如果也有activity定義了此action時(shí),進(jìn)行隱式調(diào)用android.intent.action.SEND時(shí)搏予,會(huì)談出選擇框?qū)⑺泻薬ction的應(yīng)用列出來(lái)進(jìn)行選擇分享

category

使用android.intent.category.DEFAULT就好了

data

分為uri和mimetype熊锭,像例子一樣就是分享文本和圖片,當(dāng)uri匹配成功才會(huì)被調(diào)用起來(lái)

自定義ActivityManager

public class ActivityManager{
    private static final String TAG = "ActivityManager";
    private static Stack<Activity> activityStack;
    private static ActivityManager instance;
    private Activity currActivity;
    private ActivityManager(){
    }

    public static ActivityManager getActivityManager(){
        if(instance == null){
            instance = new ActivityManager();
        }
        return instance;
    }

    //退出棧頂Activity
    public void popActivity(Activity activity){
        if(activity == null || activityStack == null){
            return;
        }
        if(activityStack.contains(activity)){
            activityStack.remove(activity);
        }
        currActivity = activity;
        //activity.finish;

    }

    public void destoryActivity(Activity activity){
        if(activity == null){
            return;
        }
        activity.finish();
        if(activityStack.contains(activity)){
            activityStack.remove(activity);
        }
        activity=null;
    }

    //獲得當(dāng)前棧頂Activity
    public Activity currentActivity(){
        if(activityStack == null||activityStack.empty()){
            return null;
        }
        return activityStack.lastElement();
    }

    //將當(dāng)前Activity推入棧中
    public void pushActivity(Activity activity){
        if(activityStack == null){
            activityStack = new Stack<Activity>();
        }
        activityStack.add(activity);
    }

    //退出棧中除指定的Activity外所有
    public void popAllActivityExceptOne(Class cls){
        while(true){
            Activity activity = currentActivity();
            if(activity == null){
                break;
            if(activity.getClass().equals(cls))
                break;
            destroyActivity(activity);
        }
    }

    //退出棧中所有Activity
    public void popAllActivity(){
        popAllActivityExceptOne(null);
    }

    public Activity getCurrentActivity(){
        return currActivity;
    }

    public int getActivityStackSize(){
        int size = 0;
        if(activityStack != null){
            size = activityStack.size();
        }
        return size;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雪侥,一起剝皮案震驚了整個(gè)濱河市碗殷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌速缨,老刑警劉巖锌妻,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異旬牲,居然都是意外死亡仿粹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)引谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)牍陌,“玉大人,你說(shuō)我怎么就攤上這事员咽《窘В” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵贝室,是天一觀的道長(zhǎng)契讲。 經(jīng)常有香客問(wèn)我,道長(zhǎng)滑频,這世上最難降的妖魔是什么捡偏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮峡迷,結(jié)果婚禮上银伟,老公的妹妹穿的比我還像新娘你虹。我一直安慰自己,他們只是感情好彤避,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布傅物。 她就那樣靜靜地躺著,像睡著了一般琉预。 火紅的嫁衣襯著肌膚如雪董饰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天圆米,我揣著相機(jī)與錄音卒暂,去河邊找鬼。 笑死娄帖,一個(gè)胖子當(dāng)著我的面吹牛也祠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播块茁,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼齿坷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了数焊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤崎场,失蹤者是張志新(化名)和其女友劉穎佩耳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谭跨,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡干厚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了螃宙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛮瞄。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谆扎,靈堂內(nèi)的尸體忽然破棺而出挂捅,到底是詐尸還是另有隱情,我是刑警寧澤堂湖,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布闲先,位于F島的核電站,受9級(jí)特大地震影響无蜂,放射性物質(zhì)發(fā)生泄漏伺糠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一斥季、第九天 我趴在偏房一處隱蔽的房頂上張望训桶。 院中可真熱鬧,春花似錦、人聲如沸舵揭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)琉朽。三九已至毒租,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間箱叁,已是汗流浹背墅垮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耕漱,地道東北人算色。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像螟够,于是被迫代替她去往敵國(guó)和親灾梦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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