Android 中的生命周期

  • Activity的生命周期

    Activity Start

    package com.vayne.routertest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import butterknife.ButterKnife;
    
    /**
    * @Author: chupengda
    * @CreateDate: 2017/8/6
    * @Description: BaseActivity
    */
    public class BaseActivity extends Activity {
    
      /**Activity被創(chuàng)建時(shí)調(diào)用**/
      @Override
      protected void onCreate(@Nullable Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          ButterKnife.bind(this);
      }
    
      /**Activity被創(chuàng)建/從后臺(tái)重新回到前臺(tái)時(shí)調(diào)用**/
      @Override
      protected void onStart() {
          super.onStart();
      }
    
      /**從后臺(tái)重新回到前臺(tái)時(shí)調(diào)用**/
      @Override
      protected void onRestart() {
          super.onRestart();
      }
    
      /**Activity被創(chuàng)建時(shí)被覆蓋后/從后臺(tái)重新回到前臺(tái)時(shí)調(diào)用**/
      @Override
      protected void onResume() {
          super.onResume();
      }
    
      /**此時(shí)Activity is running**/
    
      /**被覆蓋到下面或鎖屏?xí)r調(diào)用**/
      @Override
      protected void onPause() {
          super.onPause();
          //有可能在執(zhí)行完onPause或onStop后,系統(tǒng)資源緊張將Activity殺死,所以有必要在此保存持久數(shù)據(jù)
      }
    
      /**退出Activity/跳轉(zhuǎn)到其他Activity時(shí)調(diào)用**/
      @Override
      protected void onStop() {
          super.onStop();
      }
    
      /**退出Activity時(shí)調(diào)用**/
      @Override
      protected void onDestroy() {
          super.onDestroy();
      }
      
      /**此時(shí)Activity is shutdown**/
    }
    
    

    其他方法
    onSaveInstanceState、onRestoreInstanceState()并不是生命周期方法,它們并不一定會(huì)被觸發(fā)。

    a. onSaveInstanceState當(dāng)應(yīng)用遇到意外情況(如:內(nèi)存不足)由系統(tǒng)銷毀一個(gè)Activity時(shí),onSaveInstanceState() 會(huì)被調(diào)用。但是當(dāng)用戶主動(dòng)去銷毀一個(gè)Activity時(shí),例如在應(yīng)用中按返回鍵,onSaveInstanceState()就不會(huì)被調(diào)用。

    b.通常onSaveInstanceState()只適合用于保存一些臨時(shí)性的狀態(tài),而onPause()適合用于數(shù)據(jù)的持久化保存。

      /**
        *調(diào)用onSaveInstanceState的時(shí)機(jī)總會(huì)發(fā)生在onStop之前,
        *至于調(diào)用時(shí)機(jī)會(huì)不會(huì)發(fā)生在onPause方法之前,
        *那就說不定了,這個(gè)沒有固定的順序可言,
        *正常情況下一般onSaveInstanceState不會(huì)被調(diào)用。
        */
      @Override
      protected void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
          //被摧毀前緩存一些數(shù)據(jù) 
          outState.putString("name", "chupengda");
      }
    
      private String name;
    
      /**
        *在onStart之后調(diào)用
        */
      @Override
      protected void onRestoreInstanceState(Bundle savedInstanceState) {
          super.onRestoreInstanceState(savedInstanceState);
          //被重新創(chuàng)建后恢復(fù)緩存的數(shù)據(jù)
          name = savedInstanceState.getString("name"); 
      }   
    
  • Fragment的生命周期

    package com.vayne.routertest;
    
    import android.app.Fragment;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    /**
     * @Author: chupengda
     * @CreateDate: 2017/8/8
     * @Description:
     */
    
    public class BaseFragment extends Fragment{
    
      /**對(duì)應(yīng)Activity的onCreate**/
    
      /**當(dāng)Fragment與Activity發(fā)生關(guān)聯(lián)時(shí)調(diào)用**/
      @Override
      public void onAttach(Context context) {
          super.onAttach(context);
      }
    
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      }
    
      /**創(chuàng)建該Fragment的視圖**/
      @Override
      public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
          /**創(chuàng)建視圖的方法
           * View view = inflater.inflate(R.layout.fragment_title, container, false);
           * return view;
           */
          return super.onCreateView(inflater, container, savedInstanceState);
      }
    
      /**宿主Activity創(chuàng)建完畢時(shí)調(diào)用**/
      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
      }
    
      /**其他周期方法
       * onStart()
       * onResume()
       * onPasue()
       * onStop()
       * 同Activity
       * Fragment沒有onRestart()方法
       */
    
      /**對(duì)應(yīng)Activity的onDestroy**/
    
      /**與onCreateView想對(duì)應(yīng),當(dāng)該Fragment的視圖被移除時(shí)調(diào)用**/
      @Override
      public void onDestroyView() {
          super.onDestroyView();
      }
    
      
      @Override
      public void onDestroy() {
          super.onDestroy();
      }
    
      /**與onAttach相對(duì)應(yīng),當(dāng)Fragment與Activity關(guān)聯(lián)被取消時(shí)調(diào)用**/
      @Override
      public void onDetach() {
          super.onDetach();
      }
    }
    
    
  • Service的生命周期

    主要說明內(nèi)部調(diào)用方法和外部調(diào)用方法的關(guān)系

    • startServic()

      • startServic() 啟用Service服務(wù)

        image
      • stopService() 關(guān)閉Service服務(wù)

        image
    • bindService()

      • bindService() 綁定Service服務(wù)

        image
      • 綁定Service服務(wù)() 解綁Service服務(wù)

        image
    • 注意

      • startService()和stopService()只能開啟和關(guān)閉Service,無法操作Service
      bindService()和unbindService()可以操作Service
      
      
      • startService開啟的Service,調(diào)用者退出后Service仍然存在;
      BindService開啟的Service,調(diào)用者退出后,Service隨著調(diào)用者銷毀
      

End

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容