偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

在我寫我的第一個(gè)Android App時(shí),我希望我能知道的6件事

移動(dòng)開發(fā) Android
當(dāng)你寫你的第一個(gè)Android app時(shí),這有一個(gè)列表你需要記著。這些經(jīng)驗(yàn)教訓(xùn)是我在寫第一個(gè)app源碼時(shí),犯下的真實(shí)的錯(cuò)誤。我將會(huì)在后面展示這些錯(cuò)誤。記住這些事情能幫助你寫一個(gè)讓你感到有點(diǎn)自豪的app。

我的***個(gè)app是糟糕的。實(shí)際上,它太糟糕了,所以我把它從商店中移除,我甚至不再因我把它列在我的簡歷之中而煩惱。如果我在寫它之前,知道一些有關(guān)Android開發(fā)的事,那個(gè)app就不會(huì)那么糟糕。

當(dāng)你寫你的***個(gè)Android app時(shí),這有一個(gè)列表你需要記著。這些經(jīng)驗(yàn)教訓(xùn)是我在寫***個(gè)app源碼時(shí),犯下的真實(shí)的錯(cuò)誤。我將會(huì)在后面展示這些錯(cuò)誤。記住這些事情能幫助你寫一個(gè)讓你感到有點(diǎn)自豪的app。

當(dāng)然,如果你作為一個(gè)Android開發(fā)的學(xué)生正在做正確的工作,無論如何,不久后你都有可能恨你寫的app,正如@codestandards所說,如果你一年前碼的代碼并不能讓你感覺到不適,那你有可能沒怎么學(xué)習(xí)。

如果你是一個(gè)有經(jīng)驗(yàn)的Java開發(fā)者, 第1,2和第5條可能并不能讓你感興趣。另外的第3,4條可能展示你一些很酷的但你可能還不知道的東西。
對Contexts不要有靜態(tài)引用

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

這可能看起來對任何人來說,都是一個(gè)不可能犯的錯(cuò)誤。但并非這樣,我就犯過。我也看到其他人犯過這樣的錯(cuò)誤,并且我也看到很多人并不能在***時(shí)間指出為什么這是一個(gè)錯(cuò)誤。不要這樣做。它是一個(gè)noob move

如果當(dāng)這個(gè)Activity傳遞到它的構(gòu)造函數(shù)里,MeTrackerStore持有這個(gè)Activity的引用,那這個(gè)Activity將仍然不會(huì)被回收(除非這個(gè)靜態(tài)變量被重新賦值給另一個(gè)Activity)。這是因?yàn)閙MeTrackerStore是靜態(tài)的,靜態(tài)變量的內(nèi)存是不會(huì)被回收的,直到程序里正在運(yùn)行的進(jìn)程停止。如果你發(fā)現(xiàn)自己嘗試這么做,那么你的代碼可能有一些嚴(yán)重的錯(cuò)誤。尋找?guī)椭脑?,可以看看Google’s Udacity里的課程 “Android Development for Beginners”

注意:技術(shù)上講,你可以hold一個(gè)對Context的靜態(tài)引用,但不會(huì)引起內(nèi)存泄漏,但我不會(huì)推薦你這么做。
當(dāng)心對那些你無法控制它的生命周期的對象進(jìn)行隱式引用

 

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

這段代碼有很多問題,但我將關(guān)注其中的一個(gè)。在Java中,非靜態(tài)的內(nèi)部類對包含它的類對象有一個(gè)隱式的引用。

在這個(gè)例子中,任何GetLatAndLongAndUpdateMapCameraAsyncTask對象都將有個(gè)DefineGeofenceFragment對象的引用。匿名類也是如此:它會(huì)對包含它的類對象有個(gè)隱式的引用。

這個(gè)GetLatAndLongAndUpdateMapCameraAsyncTask對象對Fragment對象有個(gè)隱式的的引用,一個(gè)我們無法控制它生命周期的對象。Android SDK負(fù)責(zé)適當(dāng)?shù)膭?chuàng)建和銷毀Fragment對象,如果因?yàn)镚etLatAndLongAndUpdateMapCameraAsyncTask對象正在執(zhí)行所以不能被回收的話,那它持有對象也無法被回收。

這里有一個(gè)很棒的Google IO 視頻解釋為什么這種事會(huì)發(fā)生
讓Android Studio為你工作

 

  1. public ViewPager getmViewPager() { 
  2. return mViewPager; 

這個(gè)片段是我使用”Generate Getter”代碼補(bǔ)全時(shí),Android Studio為我生成的,這個(gè)getter方法對這個(gè)實(shí)例變量保持了’m’前綴。這并不理想。

(另外,你一定想知道為毛實(shí)例變量神明的時(shí)候要帶個(gè)’m’前綴:這個(gè)’m’常常被約定作為實(shí)例變量的前綴。它代表了’member’。)

不論你是否認(rèn)為’m’作為你實(shí)例變量的前綴是一個(gè)好主意,這里有一個(gè)經(jīng)驗(yàn):Android Studio可以幫你按照你養(yǎng)成的習(xí)慣去編寫代碼。比如說,你可以使用Android Studio中的代碼風(fēng)格框去讓Android Studio自動(dòng)的加上’m’到你的實(shí)例變量并且自動(dòng)移除’m’當(dāng)它生成getters,setters,和構(gòu)造參數(shù)時(shí)。

 

Android Studio可以做很多事情,學(xué)習(xí)快捷鍵和活動(dòng)模版會(huì)是一個(gè)好的開始。
方法應(yīng)該只做一件事

有一個(gè)方法我寫超過了1000行。這樣的方法很難讀懂,修改和重用。試著寫僅僅做一件事的方法。典型的,這意味著你應(yīng)該懷疑那些你寫超過20行的代碼。這里你可以招募Android Studio去幫助你指出有問題的方法:

向那些比你更聰明,更有經(jīng)驗(yàn)的人學(xué)習(xí)

這好像挺起來不重要,但是這是我寫***個(gè)app時(shí)犯下的錯(cuò)誤。

當(dāng)你正在寫程序時(shí),你將會(huì)犯錯(cuò)。其他的人已經(jīng)犯過這樣的錯(cuò)誤了。向其他人學(xué)習(xí)。如果你重復(fù)那些可以避免的錯(cuò)誤,那你就是在浪費(fèi)時(shí)間。

讀Pragmatic Programmer. 然后讀Effective Java.這兩本書會(huì)幫助你避免犯一些常見的錯(cuò)誤。當(dāng)你讀完這兩本書后,保持向聰明的人學(xué)習(xí)。
使用庫

當(dāng)你寫一個(gè)app,你可能會(huì)遇到那鞋前人已經(jīng)解決了的問題。而且,大量的解決辦法都是開放的作為資源庫。 好好利用他們。

在我的***個(gè)app中,我寫的功能已經(jīng)被其他庫所提供了,它們中的一些庫來自于標(biāo)準(zhǔn)的java中的一部分。另一些則是像Retrofit和Picasso這樣的庫。如果你不確定你要應(yīng)該用什么庫,你能做3件事:

1.聽Google IO Fragmented podcast episode
2.訂閱Android Weekly
3.尋找解決類似問題的開源應(yīng)用。你可能發(fā)現(xiàn)它們用了第三發(fā)的庫(third-party library)或者用了你并沒有在意的標(biāo)準(zhǔn)的java庫。
總結(jié)

寫一個(gè)好的Android app是非常難的。不要因?yàn)橹貜?fù)我的錯(cuò)誤讓它變的更加艱難。

責(zé)任編輯:chenqingxiang 來源: 西二旗劍客
相關(guān)推薦

2014-10-24 10:36:32

程序員

2015-08-04 09:59:29

編程學(xué)編程

2020-05-08 15:30:42

PostgreSQL數(shù)據(jù)庫數(shù)據(jù)

2009-07-27 10:05:01

富士康職場

2024-06-03 00:00:00

Tailwind工具CSS

2014-08-15 15:01:29

時(shí)間軸

2019-04-23 05:35:45

開發(fā)碼農(nóng)

2023-09-28 13:21:32

2020-09-21 06:50:29

勒索軟件攻擊網(wǎng)絡(luò)安全

2014-09-05 13:37:29

程序員

2020-11-05 10:33:01

開發(fā)代碼技術(shù)

2013-04-08 09:54:34

2020-05-19 21:06:17

任正非華為員工

2015-08-05 09:31:42

開發(fā)六件事

2013-11-13 11:05:41

2014-08-12 09:22:05

程序員

2016-04-07 10:49:28

游戲開發(fā)者

2018-03-26 15:30:31

人工智能機(jī)器人馬云

2020-10-20 10:14:01

JVM內(nèi)存模型

2020-07-16 08:32:16

JavaScript語言語句
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)