给Android程序员的六个建议
給Android程序員的六個(gè)建議
分類:?安卓相關(guān)2015-07-14 23:58?177人閱讀?評(píng)論(0)?收藏?舉報(bào) android程序員如果你一年前寫的代碼 , 在現(xiàn)在看來(lái)你還感覺寫的很不錯(cuò) , 那么說明你學(xué)習(xí)的不夠多.
不要在Context中持有靜態(tài)引用
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
這個(gè)毛病可能很多人都會(huì)犯過 , 如果MeTrackerStore通過構(gòu)造持有activity的引用 , 那這個(gè)activity就永遠(yuǎn)不會(huì)被垃圾回收.(除非靜態(tài)變量被重新分配至不同的activity)
這是因?yàn)镸eTrackerStore?是靜態(tài)的 , 而對(duì)于靜態(tài)變量的存儲(chǔ), 當(dāng)應(yīng)用程序啟動(dòng) , 不收集 , 知道退出該應(yīng)用程序正在運(yùn)行的進(jìn)程 .
注: 從技術(shù)層面來(lái)說 , 你可以持有一個(gè)靜態(tài)應(yīng)用的?application context?, 這樣不會(huì)造成內(nèi)存泄露 , 但不建議這么做
注意控制”隱性引用”對(duì)象的生命周期
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
這段代碼有很多問題 , 我們把終點(diǎn)放在隱式引用 . 在Java中 , 對(duì)于包含靜態(tài)內(nèi)部類的類 , 非靜態(tài)內(nèi)部類具有隱式引用.
本段代碼中 , 對(duì)與外部類DefineGeofenceFragment?將持有一個(gè)?GetLatAndLongAndUpdateMapCameraAsyncTask?引用
對(duì)與包含內(nèi)部類的外部類來(lái)說 , 他們有一個(gè)隱含的引用包含匿名類的類的實(shí)例 , 該GetLatAndLongAndUpdateMapCameraAsyncTask?有一個(gè)隱含的引用片段
Android Studio 讓你更快捷, 更舒服?
AS提供的快捷鍵和live templates,會(huì)讓你寫起代碼飛快,目前Android Studio已經(jīng)可以支持NDK開發(fā),日后會(huì)有越來(lái)越多的人喜歡Andriod Studio并使用它來(lái)開發(fā)。
有一個(gè)在我寫這超過100行的類之一的方法。這樣的方法難以閱讀,修改和重新使用。試著寫的方法只能做一件事。通常情況下,這意味著你應(yīng)該懷疑的是超過20行代碼的方法。在這里,你可以招募的Android Studio來(lái)幫助你發(fā)現(xiàn)問題的方法。
向比你有經(jīng)驗(yàn)的人學(xué)習(xí)?
這可能聽起來(lái)微不足道,但它是一個(gè)錯(cuò)誤,我做的時(shí)候,我寫我的第一個(gè)應(yīng)用程序。?
當(dāng)你寫一個(gè)應(yīng)用程序,你會(huì)犯錯(cuò)誤。其他人已經(jīng)取得了這些錯(cuò)誤。從這些人的了解。你是在浪費(fèi)你的時(shí)間,如果你重復(fù)別人的可以避免的錯(cuò)誤。我浪費(fèi)了大量的時(shí)間在我的第一個(gè)應(yīng)用程序使得我本來(lái)可以避免,如果我只是花了一點(diǎn)時(shí)間,從經(jīng)驗(yàn)豐富的軟件開發(fā)人員學(xué)習(xí)錯(cuò)誤。?
閱讀程序員修煉。然后閱讀有效的Java。這兩本書將幫助你避免我們作出開發(fā)新手常犯的錯(cuò)誤。當(dāng)你與那些書做,不停地尋找聰明的人學(xué)習(xí)的榜樣。
多使用第三方庫(kù)?
當(dāng)你寫一個(gè)應(yīng)用時(shí) , 你可能會(huì)遇到更聰明 , 更有經(jīng)驗(yàn)的人已經(jīng)解決了你的需求或問題. Android 有很多開源庫(kù) , 我們可以多利用他們。?
在我的應(yīng)用中 , 我經(jīng)常使用第三方庫(kù)提供的功能 , 比如 Retrofit 和 Picasso . 如果你不確定你需要哪種類型或功能的庫(kù) , 下面介紹一下比較流行的幾款庫(kù):
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的给Android程序员的六个建议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware网络配置详解
- 下一篇: URAL 1721 Two Sides