Code Review(二),codereview

來源:互聯網
上載者:User

Code Review(二),codereview

1.      對於ListView的最佳化

使用BindView函數專門處理資料與視圖綁定的操作

getItem函數與getItemId函數不是在需要的時候才去重寫的,而是必鬚根據自身應用的實際情況對其進行修改,比如getItemId,不一定是返回position,也可以返回list集合中的相應位置上元素的ID

視實際情況而定,當要適配到視圖條目上的資料對象為空白時,如有需要應該對視圖也進行更新,否則到時候顯示給使用者的將是該條試圖條目上原本的資料而不是空資料

使用自訂ViewHolder對控制項進行初始化,避免多次findViewById

2.      Activity中控制項以及案頭外掛程式的介面重新整理

目前操作過於繁瑣而且也沒有必要,可以統一通過對網路狀態改變的事件進行監聽,從而對APN、WIFI的介面顯示進行相應的更新,同時可以考慮對中間狀態也進行擷取,並且當處於中間狀態時控制項應該是不可被操作的

以重新整理Swicher為例:

//定義對網路進行監控的廣播接收者public class SwitcherNetworkStatusMonitor extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {updateSwitchWifiView();} else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {updateSwitchApnView();}}}//更新Wifi控制項函數public void updateSwitchWifiView() {if (switchWIFI != null) {WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);int wifiStatus = wifiManager.getWifiState();if (wifiStatus == WifiManager.WIFI_STATE_ENABLED) {switchWIFI.setChecked(true);} else if (wifiStatus == WifiManager.WIFI_STATE_DISABLED) {switchWIFI.setChecked(false);}}}//更新Apn控制項函數public void updateSwitchApnView() {if (switchAPN != null) {NetworkManager networkManager = new NetworkManager(getApplicationContext());if (networkManager.isApnOpened()) {switchAPN.setChecked(true);} else {switchAPN.setChecked(false);}}}//在onStart()函數中對BroadcastReceiver進行註冊以及控制項的初始化@Overrideprotected void onStart() {super.onStart();switchAPN = (Switch) findViewById(R.id.apn_switcher);switchWIFI = (Switch) findViewById(R.id.wifi_switcher);mSwitcherNetworkStatusMonitor = new SwitcherNetworkStatusMonitor();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);registerReceiver(mSwitcherNetworkStatusMonitor, intentFilter);}//在onStop()函數中登出掉BroadcastReceiver@Overrideprotected void onStop() {unregisterReceiver(mSwitcherNetworkStatusMonitor);super.onStop();}

3.     理解PendingIntent建立時flags參數的含義

4.    對於每個類、每個方法要明確它們的角色和分工,每個變數的位置也要放在適合它們的位置,比如視圖變數就不應放在廣播接收者中

5.    內部類和外部類學習

6.    Static作用

靜態代碼塊:在項目啟動的時候項目代碼塊就會被執行,靜態方法在類載入的時候就已經載入了,但是要在被調用的時候靜態方法才會執行。

由於靜態內部類只能訪問外部類中的靜態成員,而findViewById等方法都是非靜態,這樣可以避免該類持有一些不必要的對象,長期地持有諸如控制項等試圖資源甚至是Activity或者上下文環境會導致這些資源長期駐紮在記憶體中得不到釋放,最終導致記憶體泄露。

7.    資料庫並行問題

通過擴充Application進而在整個應用程式的啟動時開啟資料庫,終結時關閉資料庫。應用程式的服務是運行在程式的進程上的,當程式進程被終結了,服務也就不存在了。

建立ENApplication類繼承Application實現onCreate()與onTerminate()方法

 @Overridepublic void onCreate() {super.onCreate();DatabaseUtil.openDatabase(getApplicationContext());}@Overridepublic void onTerminate() {DatabaseUtil.closeDatabase();super.onTerminate();}

8.    擴充系統檢視表或者系統服務時,在建立時候應該讓系統先建立自己的內容,進而再執行我們的操作,而在銷毀時,應該先銷毀我們的內容再執行系統的銷毀操作。如在onCreate()函數時先調用super.onCreate(),在實現自己的操作,而在onDestroy()時,先銷毀自訂的內容再調用super.onDestroy()


code review具體怎做review
java 兩種不懂風格的編寫

第一種條件明了,不會編程的人看了都明白
第二種效率稍微高一點點,在else if裡面要少比較一次

公司裡面人多,肯定2種代碼都有。但是如果有code review的話,第一種肯定被拋棄。

所以毫不猶豫用效率高的第二種
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.