<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在Java中,我們習慣將常用的代碼放到對應的工具類中,例如ToastUtils、NetworkUtils、ImageLaoderUtils等。以NetworkUtils為例,該類中我們通常會放入Android經常需要使用的網絡相關方法。比如,我們現在有一個判斷手機網絡是否可用的方法: ``` public class NetworkUtils { public static boolean isMobileConnected(Context context) { if (context ! = null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mMobileNetworkInfo = mConnectivityManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (mMobileNetworkInfo ! = null) { return mMobileNetworkInfo.isAvailable(); } } return false; } } ``` 在需要調用的地方,我們通常會這樣寫: ``` Boolean isConnected = NetworkUtils.isMobileConnected(context); ``` 雖然用起來比沒封裝之前優雅了很多,但是每次都要傳入context,造成的煩瑣我們先不計較,重要是可能會讓調用者忽視context和mobileNetwork間的強聯系。作為代碼的使用者,我們**更希望在調用時省略NetworkUtils類名,并且讓isMobileConnected可以看起來像context的一個屬性或方法**。我們期望的是下面這樣的使用方式: ``` Boolean isConnected = context.isMobileConnected(); ``` 由于Context是Andorid SDK自帶的類,我們無法對其進行修改,在Java中目前只能通過繼承Context新增靜態成員方法來實現。如果你閱讀過前面的內容,應該知道在Kotlin中,我們**通過擴展函數就能簡單地實現**: ``` fun Context.isMobileConnected(): Boolean { val mNetworkInfo = connectivityManager.activeNetworkInfo if (mNetworkInfo ! = null) { return mNetworkInfo.isAvailable } return false } ``` 我們只需將以上代碼放入對應文件中即可。這時我們已經擺脫了類的束縛,使用方式如下: ``` val isConnected = context.isMobileConnected(); ``` 值得一提的是,在Android中對Context的生命周期需要進行很好地把控。這里我們**應該使用ApplicationContext,防止出現生命周期不一致導致的內存泄漏或者其他問題**。 除了上述方法,我們還有許多這樣通用的代碼,我們可以將它們放入不同的文件下。包括上面提到的Snackbar,我們也可以為其創建一個SnackbarUtils,這樣會提供非常多的便利。但是需要注意的是,我們不能濫用這個特性具體原因在后面(被濫用的擴展函數)這一章節介紹。
                  <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>

                              哎呀哎呀视频在线观看