<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                文檔當前狀態:**alpha0.1** * [x] 選題收集:2018/01/09 * [ ] 初稿整理: * [ ] 補充校對: * [ ] 入庫存檔: --- 參考源: [Android:手把手帶你 使用 熟悉而陌生的Application類](https://juejin.im/post/5a5413f4f265da3e497fe8b9) --- # 前言 * `Applicaiton`類在 `Android`開發中非常常見,可是你真的了解`Applicaiton`類嗎? * 本文將全面解析`Applicaiton`類,包括特點、方法介紹、應用場景和具體使用,希望你們會喜歡。 * * * # 目錄 ![示意圖](https://user-gold-cdn.xitu.io/2018/1/9/160d86decf202880?imageView2/0/w/1280/h/960/ignore-error/1) * * * # 1\. 定義 * 代表應用程序(即 `Android App`)的類,也屬于`Android`中的一個系統組件 * 繼承關系:繼承自 `ContextWarpper` 類 ![示意圖](https://user-gold-cdn.xitu.io/2018/1/9/160d86ded05ff21b?imageView2/0/w/1280/h/960/ignore-error/1) * * * # 2\. 特點 ### 2.1 實例創建方式:單例模式 * 每個`Android App`運行時,會首先自動創建`Application` 類并實例化 `Application` 對象,且只有一個 > 即 `Application`類 是單例模式(`singleton`)類 * 也可通過 繼承 `Application` 類自定義`Application` 類和實例 ### 2.2 實例形式:全局實例 即不同的組件(如`Activity、Service`)都可獲得`Application`對象且都是同一個對象 ### 2.3 生命周期:等于 Android App 的生命周期 `Application` 對象的生命周期是整個程序中最長的,即等于`Android App`的生命周期 * * * # 3\. 方法介紹 那么,該 `Application` 類有什么作用呢?下面,我將介紹`Application` 類的方法使用 ![示意圖](data:image/svg+xml;utf8,) ### 3.1 onCreate() * 調用時刻: `Application` 實例創建時調用 > `Android`系統的入口是`Application`類的 `onCreate()`,默認為空實現 * 作用 1. 初始化 應用程序級別 的資源,如全局對象、環境配置變量、圖片資源初始化、推送服務的注冊等 > 注:請不要執行耗時操作,否則會拖慢應用程序啟動速度 1. 數據共享、數據緩存 設置全局共享數據,如全局共享變量、方法等 > 注:這些共享數據只在應用程序的生命周期內有效,當該應用程序被殺死,這些數據也會被清空,所以只能存儲一些具備 **臨時性的共享數據** * 具體使用 ~~~ // 復寫方法需要在Application子類里實現 private static final String VALUE = "Carson"; // 初始化全局變量 @Override public void onCreate() { super.onCreate(); VALUE = 1; } } ~~~ ### 3.2 registerComponentCallbacks() & unregisterComponentCallbacks() * 作用:注冊和注銷 `ComponentCallbacks2`回調接口 > 本質上是復寫 `ComponentCallbacks2`回調接口里的方法從而實現更多的操作,具體下面會詳細介紹 * 具體使用 ~~~ registerComponentCallbacks(new ComponentCallbacks2() { // 接口里方法下面會繼續介紹 @Override public void onTrimMemory(int level) { } @Override public void onLowMemory() { } @Override public void onConfigurationChanged(Configuration newConfig) { } }); ~~~ ### 3.3 onTrimMemory() * 作用:通知 應用程序 當前內存使用情況(以內存級別進行識別) > `Android 4.0` 后提供的一個API ![示意圖](data:image/svg+xml;utf8,) * 應用場景:根據當前內存使用情況進行自身的內存資源的不同程度釋放,以避免被系統直接殺掉 & 優化應用程序的性能體驗 > 1. 系統在內存不足時會按照`LRU Cache`中從低到高殺死進程;優先殺死占用內存較高的應用 > 2. 若應用占用內存較小 = 被殺死幾率降低,從而快速啟動(即熱啟動 = 啟動速度快) > 3. 可回收的資源包括: a. 緩存,如文件緩存,圖片緩存 b. 動態生成 & 添加的View 典型的應用場景有兩個: ![示意圖](data:image/svg+xml;utf8,) * 具體使用 ~~~ registerComponentCallbacks(new ComponentCallbacks2() { @Override public void onTrimMemory(int level) { // Android系統會根據當前內存使用的情況,傳入對應的級別 // 下面以清除緩存為例子介紹 super.onTrimMemory(level); . if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) { mPendingRequests.clear(); mBitmapHolderCache.evictAll(); mBitmapCache.evictAll(); } }); ~~~ * 可回調對象 & 對應方法 ~~~ Application.onTrimMemory() Activity.onTrimMemory() Fragment.OnTrimMemory() Service.onTrimMemory() ContentProvider.OnTrimMemory() ~~~ **特別注意:`onTrimMemory()`中的`TRIM_MEMORY_UI_HIDDEN`與`onStop()`的關系** * `onTrimMemory()`中的`TRIM_MEMORY_UI_HIDDEN`的回調時刻:當應用程序中的所有UI組件全部不可見時 * `Activity`的`onStop()`回調時刻:當一個Activity完全不可見的時候 * 使用建議: 1. 在 `onStop()中`釋放與 `Activity`相關的資源,如取消網絡連接或者注銷廣播接收器等 2. 在`onTrimMemory()`中的`TRIM_MEMORY_UI_HIDDEN`中釋放與`UI`相關的資源,從而保證用戶在使用應用程序過程中,`UI`相關的資源不需要重新加載,從而提升響應速度 > 注:`onTrimMemory`的`TRIM_MEMORY_UI_HIDDEN`等級是在`onStop()`方法之前`調用`的 ### 3.4 onLowMemory() * 作用:監聽 `Android`系統整體內存較低時刻 * 調用時刻:`Android`系統整體內存較低時 ~~~ registerComponentCallbacks(new ComponentCallbacks2() { @Override public void onLowMemory() { } }); ~~~ * 應用場景:`Android 4.0`前 檢測內存使用情況,從而避免被系統直接殺掉 & 優化應用程序的性能體驗 > 類似于 `OnTrimMemory()` * 特別注意:`OnTrimMemory()` & `OnLowMemory()` 關系 1. `OnTrimMemory()`是 `OnLowMemory()` `Android 4.0`后的替代 `API` 2. `OnLowMemory()` = `OnTrimMemory()`中的`TRIM_MEMORY_COMPLETE`級別 3. 若想兼容`Android 4.0`前,請使用`OnLowMemory()`;否則直接使用`OnTrimMemory()`即可 ### 3.5 onConfigurationChanged() * 作用:監聽 應用程序 配置信息的改變,如屏幕旋轉等 * 調用時刻:應用程序配置信息 改變時調用 * 具體使用 ~~~ registerComponentCallbacks(new ComponentCallbacks2() { @Override public void onConfigurationChanged(Configuration newConfig) { ... } }); ~~~ * 該配置信息是指 :`Manifest.xml`文件下的 `Activity`標簽屬性`android:configChanges`的值,如下: ~~~ <activity android:name=".MainActivity"> android:configChanges="keyboardHidden|orientation|screenSize" // 設置該配置屬性會使 Activity在配置改變時不重啟,只執行onConfigurationChanged() // 上述語句表明,設置該配置屬性可使 Activity 在屏幕旋轉時不重啟 </activity> ~~~ ### 3.6 registerActivityLifecycleCallbacks() & unregisterActivityLifecycleCallbacks() * 作用:注冊 / 注銷對 應用程序內 所有`Activity`的生命周期監聽 * 調用時刻:當應用程序內 `Activity`生命周期發生變化時就會調用 > 實際上是調用`registerActivityLifecycleCallbacks()`里 `ActivityLifecycleCallbacks`接口里的方法 * 具體使用 ~~~ // 實際上需要復寫的是ActivityLifecycleCallbacks接口里的方法 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { Log.d(TAG,"onActivityCreated: " + activity.getLocalClassName()); } @Override public void onActivityStarted(Activity activity) { Log.d(TAG,"onActivityStarted: " + activity.getLocalClassName()); } @Override public void onActivityResumed(Activity activity) { Log.d(TAG,"onActivityResumed: " + activity.getLocalClassName()); } @Override public void onActivityPaused(Activity activity) { Log.d(TAG,"onActivityPaused: " + activity.getLocalClassName()); } @Override public void onActivityStopped(Activity activity) { Log.d(TAG, "onActivityStopped: " + activity.getLocalClassName()); } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { Log.d(TAG,"onActivityDestroyed: " + activity.getLocalClassName()); } }); <-- 測試:把應用程序從前臺切到后臺再打開,看Activcity的變化 --> onActivityPaused: MainActivity onActivityStopped: MainActivity onActivityStarted: MainActivity onActivityResumed: MainActivity ~~~ ### 3.7 onTerminate() 調用時刻:應用程序結束時調用 > 但該方法只用于`Android`仿真機測試,在`Android`產品機是不會調用的 * * * # 4\. 應用場景 從`Applicaiton`類的方法可以看出,`Applicaiton`類的應用場景有:(已按優先級排序) * 初始化 應用程序級別 的資源,如全局對象、環境配置變量等 * 數據共享、數據緩存,如設置全局共享變量、方法等 * 獲取應用程序當前的內存使用情況,及時釋放資源,從而避免被系統殺死 * 監聽 應用程序 配置信息的改變,如屏幕旋轉等 * 監聽應用程序內 所有Activity的生命周期 * * * # 5\. 具體使用 * 若需要復寫實現上述方法,則需要自定義 `Application`類 * 具體過程如下 ### 步驟1:新建Application子類 即繼承 `Application` 類 ~~~ public class CarsonApplication extends Application { ... // 根據自身需求,并結合上述介紹的方法進行方法復寫實現 // 下面以onCreate()為例 private static final String VALUE = "Carson"; // 初始化全局變量 @Override public void onCreate() { super.onCreate(); VALUE = 1; } } ~~~ ### 步驟2:配置自定義的Application子類 在`Manifest.xml`文件中 `<application>`標簽里進行配置 *Manifest.xml* ~~~ <application android:name=".CarsonApplication" // 此處自定義Application子類的名字 = CarsonApplication </application> ~~~ ### 步驟3:使用自定義的Application類實例 ~~~ private CarsonApplicaiton app; // 只需要調用Activity.getApplication() 或Context.getApplicationContext()就可以獲得一個Application對象 app = (CarsonApplication) getApplication(); // 然后再得到相應的成員變量 或方法 即可 app.exitApp(); ~~~ 至此,關于 `Applicaiton` 類已經講解完畢。 * * * # 6\. 總結 * 我用一張圖總結上述文章 ![示意圖](https://user-gold-cdn.xitu.io/2018/1/9/160d86ded045a134?imageView2/0/w/1280/h/960/ignore-error/1) * 下面我將繼續對 `Android`中的知識進行深入講解 ,有興趣可以繼續關注[Carson_Ho的安卓開發筆記](https://link.juejin.im?target=https%3A%2F%2Fjuejin.im%2Fuser%2F58d4d9781b69e6006ba65edc) * * * # 請點贊!因為你的鼓勵是我寫作的最大動力!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看