Android-四大組件的工作過程

  1. 用戶參與
    用戶最常見的兩種操作, 按Home鍵或Back鍵.
    (1) 點(diǎn)擊Home鍵, 暫停當(dāng)前Activity, 調(diào)用onPause –> onSaveInstanceState –> onStop; 再次返回, 恢復(fù)當(dāng)前頁面, 調(diào)用onRestart -> onStart -> onResume.
    (2) 點(diǎn)擊Back鍵, 關(guān)閉當(dāng)前Activity, 調(diào)用onPause -> onStop -> onDestroy; 再次啟動(dòng)則為重建, 從onCreate開始調(diào)用.
    onStart()是Activity可見, 無法交互; onResume()是Activity可見, 可以交互. onPause是Activity無法交互, 必須執(zhí)行前一個(gè)Activity的onPause完成, 后一個(gè)Activity才能啟動(dòng), 在onPause中, 不能執(zhí)行復(fù)雜的操作, 否則會(huì)影響下一個(gè)Activity啟動(dòng)速度. onStop是Activity關(guān)閉顯示.
    (3)屏幕旋轉(zhuǎn)
    如果你不做任何配置
    啟動(dòng)Activity會(huì)執(zhí)行如下方法:
    onCreate –> onStart –> onResume之后旋轉(zhuǎn)屏幕,則Activity會(huì)被銷毀并重新創(chuàng)建竞穷,之后便會(huì)執(zhí)行如下方法:onPause –> onSaveInstanceState –> onStop –> onDestroy –> onCreate –> onStart –> onRestoreInstanceState –> onResume

在系統(tǒng)調(diào)用onCreate()之后奢方,就會(huì)調(diào)用onStart(),然后繼續(xù)調(diào)用onResume以進(jìn)入Resumed狀態(tài)并村,最后就會(huì)停在Resumed狀態(tài)慧妄,完成啟動(dòng)撒汉。系統(tǒng)會(huì)調(diào)用onDestrory()來結(jié)束一個(gè)Activity的聲明周期讓它回到Killed形態(tài)溺职。
onCreate():創(chuàng)建基本的UI元素芭概。
onPause()與onStop():清除Activity的資源赛不,避免浪費(fèi)。
onDestory():因?yàn)橐脮?huì)在Activity銷毀的時(shí)候銷毀罢洲,而線程不會(huì)踢故,所以清除開啟的線程。
Activity啟動(dòng)模式

  • standard(標(biāo)準(zhǔn)模式)
  • singleTop(棧頂復(fù)用模式)
  • singleTask(站內(nèi)復(fù)用模式)
  • singleInstance(單實(shí)例復(fù)用模式)

standard

默認(rèn)的啟動(dòng)模式惹苗,如果不指定Activity的啟動(dòng)模式殿较,則使用這種方式啟動(dòng)Activity。這種啟動(dòng)模式每次都會(huì)創(chuàng)建新的實(shí)例桩蓉,每次點(diǎn)擊standard模式創(chuàng)建Activity后淋纲,都會(huì)創(chuàng)建新的Activity覆蓋在原Activity上。

singleTop

系統(tǒng)會(huì)判斷當(dāng)前棧頂Activity是不是要啟動(dòng)的Activity院究,如果是則不創(chuàng)建新的Activity而直接引用這個(gè)Acitivty洽瞬。

singleTask

singleTask是檢查整個(gè)Activity棧中是否存在當(dāng)前需要啟動(dòng)的Activity。如果存在儡首,則將在Activity主語棧頂片任,并將該Activity以上的Acitivity以上的Activity都銷毀偏友。不過這里是指在同一個(gè)app中啟動(dòng)這個(gè)singleTask的Activity蔬胯,如果是其他程序singleTask模式來啟動(dòng)這個(gè),那么它將創(chuàng)建一個(gè)新的任務(wù)棧位他。

singleInstance

singleInstance這種啟動(dòng)模式和使用的瀏覽器工作原理類似氛濒,比如多個(gè)程序訪問瀏覽器,如果沒有打開鹅髓,則會(huì)打開瀏覽器舞竿。申明為singleInstance也一樣,舉個(gè)例子窿冯,如果應(yīng)用A的任務(wù)棧中創(chuàng)建了MainActivity實(shí)例骗奖,且啟動(dòng)模式為singleInstance,如果B也要激活MainActivity,則不需要?jiǎng)?chuàng)建。

Intent Flag模式

  • Intent.FLAG_Activity_NEW_TASK
  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG.ACTIVITY_NO_HISTORY

創(chuàng)建醒串、配置Service

public class FirstService extends Service{
       //必須實(shí)現(xiàn)的方法
      @Override
       public IBinder onBind(Intent arg0){
              return null
        }
        //Service被創(chuàng)建時(shí)回調(diào)該方法
        @Override
        public void onCreated(){
                super.onCreate()执桌;
        }
        //Service被啟動(dòng)時(shí)回調(diào)該方法
        @Override
        public int onStartCommand(Intent intent,int flags,int startId){
              return   START_STICKY;
           }
        //Service被關(guān)閉之前回調(diào)該方法
        @Override
        public void onDestory(){
                super.onDestory();
        }
}

在AndroidManifest配置Service

<serivce name=".FirstService" />

當(dāng)Service開發(fā)完成之后,接下來就要在程序中運(yùn)行Service了芜赌,通過Context的startService方法仰挣,通過該方法啟動(dòng)Service,訪問者與Service之間沒有關(guān)聯(lián)。

如果Service和訪問者之間需要進(jìn)行調(diào)用或交換數(shù)據(jù)缠沈,則應(yīng)該使bingService()和unbingService()方法啟動(dòng)膘壶、關(guān)閉Service错蝴。

public class BindService extends Service{
      private int count;
      private boolean quit;
      //定義onBinder方法鎖返回的對(duì)象
      private MyBinder binder=new MyBinder();
      //通過繼承Binder來實(shí)現(xiàn)IBinder類
      public class MyBinder extends Binder{
            public int getCount(){
                  //獲取Service的運(yùn)行狀態(tài)
                  return count; 
            } 
      }
      //必須實(shí)現(xiàn)的方法,綁定該Service時(shí)回調(diào)該方法
      @Override
      public IBinder onBind(Intent intent){
              //返回IBinder對(duì)象
              return binder;
      }
      @Override
      public void onCreate(){
            super.onCreate();  
             new Thread(){
                    @Override
                     public void run(){
                           while(!quit){
                                    try{
                                           Thread.sleep(1000);
                                     }
                                      catch(InterruptedException){
                                                  
                                        }
                                         count++;
                            }
                      }
              }.start();
      }
      //Service被斷開連接時(shí)回調(diào)改方法
      @Override
      public boolean onUnbind(Intent intent){
              return true;
      } 
      //Service被關(guān)閉之前回調(diào)該方法
       @Override
       public void onDestory(){
              super.onDestory();
              this.quit=true;
        }
}

pirvate ServiceConnection conn=new ServiceConnection(){
        @Override
        public void onSeriviceConnected(ComponentName name,IBinder serivce){
              //獲取Serivce的onBind方法鎖返回的MyBinder對(duì)象
              binder=(BinderService.MyBinder)serivce;
        }
        //當(dāng)該Activity與Service斷開連接時(shí)回調(diào)改方法
        @Override
        public void onSerivceDisconnected(ComponentName name){
                
        }
}

ContentProvider

ContentProvider相當(dāng)于一個(gè)“網(wǎng)站”颓芭,它的作用是暴露可供操作的數(shù)據(jù)顷锰;其它應(yīng)用程序則通過ContentResolver來操作ContentProvider所暴露的數(shù)據(jù),ContentResolver相當(dāng)于HttpClient.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畜伐,一起剝皮案震驚了整個(gè)濱河市馍惹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玛界,老刑警劉巖万矾,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異慎框,居然都是意外死亡良狈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門笨枯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薪丁,“玉大人,你說我怎么就攤上這事馅精⊙鲜龋” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵洲敢,是天一觀的道長(zhǎng)漫玄。 經(jīng)常有香客問我,道長(zhǎng)压彭,這世上最難降的妖魔是什么睦优? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮壮不,結(jié)果婚禮上汗盘,老公的妹妹穿的比我還像新娘。我一直安慰自己询一,他們只是感情好隐孽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著健蕊,像睡著了一般菱阵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绊诲,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天送粱,我揣著相機(jī)與錄音,去河邊找鬼掂之。 笑死抗俄,一個(gè)胖子當(dāng)著我的面吹牛脆丁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播动雹,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼槽卫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了胰蝠?” 一聲冷哼從身側(cè)響起歼培,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茸塞,沒想到半個(gè)月后躲庄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钾虐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年噪窘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片效扫。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倔监,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菌仁,到底是詐尸還是另有隱情浩习,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布济丘,位于F島的核電站谱秽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闪盔。R本人自食惡果不足惜弯院,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一辱士、第九天 我趴在偏房一處隱蔽的房頂上張望泪掀。 院中可真熱鬧,春花似錦颂碘、人聲如沸异赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塔拳。三九已至,卻和暖如春峡竣,著一層夾襖步出監(jiān)牢的瞬間靠抑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工适掰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颂碧,地道東北人荠列。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像载城,于是被迫代替她去往敵國(guó)和親肌似。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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