給Android程式設計師的六個建議

weixin_33763244發表於2015-07-15

給Android程式設計師的六個建議

分類: 安卓相關

如果你一年前寫的程式碼 , 在現在看來你還感覺寫的很不錯 , 那麼說明你學習的不夠多.

  1. 不要在Context中持有靜態引用

    
    public class MainActivity extends LocationManagingActivity implements ActionBar.OnNavigationListener,
            GooglePlayServicesClient.ConnectionCallbacks,
            GooglePlayServicesClient.OnConnectionFailedListener {
        //...
        private static MeTrackerStore mMeTrackerStore; 
        //...
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            //...
            mMeTrackerStore = new MeTrackerStore(this);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    這個毛病可能很多人都會犯過 , 如果MeTrackerStore通過構造持有activity的引用 , 那這個activity就永遠不會被垃圾回收.(除非靜態變數被重新分配至不同的activity)

    這是因為MeTrackerStore 是靜態的 , 而對於靜態變數的儲存, 當應用程式啟動 , 不收集 , 知道退出該應用程式正在執行的程式 .

    注: 從技術層面來說 , 你可以持有一個靜態應用的 application context , 這樣不會造成記憶體洩露 , 但不建議這麼做

  2. 注意控制”隱性引用”物件的生命週期

    
    public class DefineGeofenceFragment extends Fragment {
        public class GetLatAndLongAndUpdateMapCameraAsyncTask extends AsyncTask<String, Void, LatLng> {
    
            @Override
            protected LatLng doInBackground(String... params) {
                //...
                try {
                    //Here we make the http request for the place search suggestions
                    httpResponse = httpClient.execute(httpPost);
                    HttpEntity entity = httpResponse.getEntity();
                    inputStream = entity.getContent();
                    //..
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    這段程式碼有很多問題 , 我們把終點放在隱式引用 . 在Java中 , 對於包含靜態內部類的類 , 非靜態內部類具有隱式引用.

    本段程式碼中 , 對與外部類DefineGeofenceFragment 將持有一個 GetLatAndLongAndUpdateMapCameraAsyncTask 引用

    對與包含內部類的外部類來說 , 他們有一個隱含的引用包含匿名類的類的例項 , 該GetLatAndLongAndUpdateMapCameraAsyncTask 有一個隱含的引用片段

  3. Android Studio 讓你更快捷, 更舒服 
    AS提供的快捷鍵和live templates,會讓你寫起程式碼飛快,目前Android Studio已經可以支援NDK開發,日後會有越來越多的人喜歡Andriod Studio並使用它來開發。

  4. 一個方法只做一件事 
    有一個在我寫這超過100行的類之一的方法。這樣的方法難以閱讀,修改和重新使用。試著寫的方法只能做一件事。通常情況下,這意味著你應該懷疑的是超過20行程式碼的方法。在這裡,你可以招募的Android Studio來幫助你發現問題的方法。
  5. 向比你有經驗的人學習 
    這可能聽起來微不足道,但它是一個錯誤,我做的時候,我寫我的第一個應用程式。 
    當你寫一個應用程式,你會犯錯誤。其他人已經取得了這些錯誤。從這些人的瞭解。你是在浪費你的時間,如果你重複別人的可以避免的錯誤。我浪費了大量的時間在我的第一個應用程式使得我本來可以避免,如果我只是花了一點時間,從經驗豐富的軟體開發人員學習錯誤。 
    閱讀程式設計師修煉。然後閱讀有效的Java。這兩本書將幫助你避免我們作出開發新手常犯的錯誤。當你與那些書做,不停地尋找聰明的人學習的榜樣。

  6. 多使用第三方庫 
    當你寫一個應用時 , 你可能會遇到更聰明 , 更有經驗的人已經解決了你的需求或問題. Android 有很多開源庫 , 我們可以多利用他們。 
    在我的應用中 , 我經常使用第三方庫提供的功能 , 比如 Retrofit 和 Picasso . 如果你不確定你需要哪種型別或功能的庫 , 下面介紹一下比較流行的幾款庫:

    1.  Google 廣播 (http://fragmentedpodcast.com/episodes/9/) , 告訴你什麼情況 使用什麼庫 , 例如 Dagger Retrofit Picasso 和 Mockito
    2. 訂閱Android週刊 . 他們會給你推送最新的第三方庫或比較最新 , 最近比較流行的設計模式及功能.
    3. 尋找開原始碼的應用 去解決類似你需要的功能或模組. 這個應用可能會用到你不知道的第三方庫.
    

版權宣告:本文為博主原創文章,未經博主允許不得轉載。

相關文章