亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Android Developers Training】 17. 停止和重

系統(tǒng) 1836 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術(shù)一般,由于喜愛安卓而產(chǎn)生了翻譯的念頭,純屬個(gè)人興趣愛好。

原文鏈接: http://developer.android.com/training/basics/activity-lifecycle/stopping.html


正確地停止和重啟你的activity在整個(gè)生命周期過程中是非常重要的,它可以讓用戶感覺到你的應(yīng)用一直處于活躍狀態(tài),并且不會丟失他們的進(jìn)度。以下是一些你的activity被停止或者被重啟的例子:

  • 用戶打開了最近使用過的應(yīng)用窗口,并且從你的應(yīng)用切換到了另一個(gè)應(yīng)用。此時(shí)你的處于前臺的activity被停止。如果用戶從主菜單頁面或者最近使用過的應(yīng)用窗口回到你的應(yīng)用,此時(shí)之前被停止的activity會被重啟。
  • 用戶在你的應(yīng)用中進(jìn)行了一個(gè)啟動另一個(gè)新activity的操作。當(dāng)新activity被創(chuàng)建時(shí),當(dāng)前的activity會被停止。如果用戶此時(shí)按下返回鍵,第一個(gè)activity會被重啟。
  • 當(dāng)用戶在使用你的應(yīng)用時(shí)接到了電話

Activity 類中的兩個(gè)生命周期函數(shù) onStop() onRestart() ,使你可以在activity被停止或被重啟時(shí),進(jìn)行一些處理。不像在暫停態(tài)時(shí),activity是部分可見的。停止態(tài)時(shí)的activity是完全不可見的,同時(shí)用戶的焦點(diǎn)也在另一個(gè)activity上(或另一個(gè)應(yīng)用上)。

Note:

因?yàn)楫?dāng) Activity 被停止時(shí),系統(tǒng)在RAM中保存了它的實(shí)例,所以有可能你并不需要實(shí)現(xiàn) onStop() onRestart() 方法(甚至連 onStart() 方法也不需要,對于大多數(shù)相對比較簡單的activity來說,即使這些方法沒有實(shí)現(xiàn)也不會有什么問題,你只需要使用 onPause() 方法停止正在執(zhí)行的操作,并且釋放系統(tǒng)資源就行了)。

?

圖1. 當(dāng)用戶離開你的activity時(shí),系統(tǒng)會調(diào)用 onStop() 方法來停止你的activity(1),當(dāng)用戶返回到這個(gè)activity時(shí),

系統(tǒng)會調(diào)用 onRestart() 方法( 2 緊跟著執(zhí)行 onStart() 3 )方法和 onResume() 4 )。注意不管發(fā)生了什么使得 activity 被停止,

系統(tǒng)都會在調(diào)用 onStop() 方法之前調(diào)用 onPause() 方法。

?

一). 停止你的Activity

當(dāng)你的Activity被調(diào)用了 onStop() 方法,此時(shí)它將不再可見,并且釋放大多數(shù)用戶不再需要的資源。一旦你的Activity被停止,系統(tǒng)可能會在內(nèi)存不足的情況下銷毀它的實(shí)例。在極端的情況下,系統(tǒng)可能會直接結(jié)束你的應(yīng)用進(jìn)程,并且不調(diào)用最終的 onDestroy() 回調(diào)函數(shù),所以務(wù)必要在 onStop() 中釋放資源來防止內(nèi)存泄露。

雖然 onPause() onStop() 之前被調(diào)用,你應(yīng)該在 onStop() 中進(jìn)行負(fù)荷更大,更消耗CPU的操作,比如把信息寫入數(shù)據(jù)庫。

例如,以下是一個(gè) onStop() 的實(shí)現(xiàn),它將一段內(nèi)容的草稿存到手機(jī)存儲當(dāng)中:

      
        @Override


      
      
        protected
      
      
        void
      
      
         onStop() {

    
      
      
        super
      
      .onStop();  
      
        //
      
      
         Always call the superclass method first



    
      
      
        //
      
      
         Save the note's current draft, because the activity is stopping

    
      
      
        //
      
      
         and we want to be sure the current note progress isn't lost.
      
      

    ContentValues values = 
      
        new
      
      
         ContentValues();

    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());

    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());



    getContentResolver().update(

            mUri,    
      
      
        //
      
      
         The URI for the note to update.
      
      

            values,  
      
        //
      
      
         The map of column names and new values to apply to them.
      
      
        null
      
      ,    
      
        //
      
      
         No SELECT criteria are used.
      
      
        null
      
      
        //
      
      
         No WHERE columns are used.
      
      
                    );

}
      
    

當(dāng)你的 Activity 被停止時(shí),activity對象會保存在存儲中,并且當(dāng)它恢復(fù)時(shí),會從存儲中重新調(diào)用。你不需要再重新初始化那些進(jìn)入恢復(fù)態(tài)之前的所有回調(diào)函數(shù)中已經(jīng)創(chuàng)建好了的組件。系統(tǒng)也會在一個(gè) Bundle (一種鍵值對)中對布局中的每一個(gè) View 記錄好它的狀態(tài)(如 EditText 中的文字)。并且當(dāng)用戶回到相同的activity實(shí)例時(shí),恢復(fù)它們。(下一節(jié)課會繼續(xù)討論使用 Bundle 來存儲其它的數(shù)據(jù),防止你的activity被銷毀或重新創(chuàng)建)。

?

二). 啟動/重啟你的Activity

當(dāng)你的activity從停止態(tài)回到前臺,它會調(diào)用 onRestart() 方法。系統(tǒng)也同時(shí)會調(diào)用 onStart() 方法,該方法每當(dāng)你的 activity 變?yōu)榭梢姇r(shí)會調(diào)用(不管是被重新啟動的還是被第一次創(chuàng)建的)。然而, onRestart() 方法只在 activity 從停止態(tài)恢復(fù)時(shí)才會被調(diào)用,所以你可以用它來實(shí)現(xiàn)一些特殊的恢復(fù)工作,這些工作也許僅在 activity 之前被停止,但沒有被銷毀時(shí),有著特殊的作用。

對于一個(gè)應(yīng)用來說,使用 onRestart() 方法來恢復(fù)狀態(tài)看上去不太尋常,所以關(guān)于這個(gè)方法應(yīng)該如何使用,沒有一個(gè)指導(dǎo)性的建議。不過,因?yàn)槟愕? onStop() 方法會清除你的activity的大部分資源,因此 當(dāng)activity重啟時(shí), 你需要重新初始化它們。然而另一方面,當(dāng)activity第一次被創(chuàng)建時(shí)(即沒有該activity已經(jīng)存在的實(shí)例),你也需要初始化它們。所以,你應(yīng)該經(jīng)常使用 onStart() 方法來和 onStop() 方法相對應(yīng),因?yàn)樵谏鲜鰞煞N情況下(activity從停止態(tài)恢復(fù)和第一次被創(chuàng)建),系統(tǒng)都會調(diào)用 onStart() 方法。

例如,因?yàn)橛脩艨赡茉诨氐侥愕膽?yīng)用之前已經(jīng)離開你的應(yīng)用很久了,在 onStart() 方法中檢查一些需要的系統(tǒng)功能是否可以被調(diào)用是一個(gè)不錯(cuò)的方法:

      
        @Override


      
      
        protected
      
      
        void
      
      
         onStart() {

    
      
      
        super
      
      .onStart();  
      
        //
      
      
         Always call the superclass method first

    

    
      
      
        //
      
      
         The activity is either being restarted or started for the first time

    
      
      
        //
      
      
         so this is where we should make sure that GPS is enabled
      
      

    LocationManager locationManager =
      
         

            (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    
      
      
        boolean
      
       gpsEnabled =
      
         locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

    

    
      
      
        if
      
       (!
      
        gpsEnabled) {

        
      
      
        //
      
      
         Create a dialog here that requests the user to enable GPS, and use an intent

        
      
      
        //
      
      
         with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action

        
      
      
        //
      
      
         to take the user to the Settings screen to enable GPS when they click "OK"
      
      
            }

}



@Override


      
      
        protected
      
      
        void
      
      
         onRestart() {

    
      
      
        super
      
      .onRestart();  
      
        //
      
      
         Always call the superclass method first

    

    
      
      
        //
      
      
         Activity being restarted from stopped state    
      
      

}
    

當(dāng)系統(tǒng)銷毀了你的activity時(shí),它會對你的activity調(diào)用 onDestroy() 方法。因?yàn)槟阋呀?jīng)在 onStop() 方法中釋放了幾乎所有占用的資源,故當(dāng)被調(diào)用 onDestroy() 方法時(shí),其實(shí)大多數(shù)應(yīng)用沒有什么特別需要做的。這個(gè)方法是你清除那些可能會導(dǎo)致內(nèi)存泄露的資源的最后機(jī)會,所以你應(yīng)該確定那些額外的線程被清除,并且那些長時(shí)間運(yùn)行的操作,如函數(shù)追蹤器也被停止了。

【Android Developers Training】 17. 停止和重啟一個(gè)Activity


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本高清中文字幕一区二区三区 | 毛片在线视频观看 | 国产免费高清视频 | 五月色婷婷亚洲精品 | 青草视频网址 | 在线免费观看一级毛片 | 美女被爆羞羞网站 | a毛片免费全部在线播放毛 a毛片免费在线观看 | 五月婷在线视频 | 九九热播视频 | 欧美精品亚洲网站 | 天天操天天插 | 国产一级爱 | 国产亚洲欧美在线观看的 | 日韩亚洲一区中文字幕 | 我不卡老子影院午夜伦我不卡四虎 | 96精品专区国产在线观看高清 | 男人与牛做爰的视频 | 这里精品| 九九性视频 | 日本人的色道www免费一区 | 亚洲国产精品热久久 | 久久免费视频观看 | 日韩欧美一区二区三区不卡 | 日日碰日日操 | 苗族一级特黄a大片 | 四虎影视库国产精品一区 | videoxxoo欧美老师 | 亚洲精品一级一区二区三区 | 97看片吧 | 日本道在线视频 | 成人精品一区二区三区 | 免费观看一级毛片 | 在线国产视频 | 国产精品成人麻豆专区 | 不卡的毛片 | 国内精品久久久久久久影视麻豆 | 国产成人一区二区三区高清 | 天天亚洲综合 | 一道本免费视频 | zzz色|