android開發中的一些總結

1.Intent傳值
putExtra設置值,通過getIntent().getIntExtra取值,getIntent().getStringExtra(“str1”),
// 調用該對象的getStringExtra()方法來獲得使用putExtra()方法設置的字符串值
getIntent().getIntExtra(“age1”, 0)
//對於整數值,調用getIntExtra()方法(注意,如果該名稱沒有存儲值,則會使用默認值,在此爲0)

需要注意的是當傳遞自定義mode的時候mode需實現序列化方法(推薦自定義modle實現Parcelable),才能用intent的序列化傳輸。
list需使用intent的arraylist傳輸,另外還可以傳輸hashmap

2.空值判斷
對於空值的讀取要進行判斷

if(device!=null && device.size()>0){
    Do something
}

其中判斷空一定要在前面,否則會報空指針異常

3、結束app
• finish():結束當前Activity,不會立即釋放內存。遵循android內存管理機制。
• exit():結束當前組件如Activity,並立即釋放當前Activity所佔資源。
• killProcess():結束當前組件如Activity,並立即釋放當前Activity所佔資源。
以上的方法只是實現了關閉當前activity,而整個應用並沒有被關閉;
• restartPackage():結束整個App,包括service等其它Activity組件(這個方法已經過時)。
特別注意:除了finish()方法可以調用Activity的生命週期方法如onStop()、onDestroy(),其餘三種退出App均不會調用Activity的生命週期方法。除非,在調用這幾個方法之前或者之後主動調用Activity的生命週期方法。如:
System.exit(int);
onDestroy();
所以方案是建立一個單例類管理所有的activity放置在退出時仍有activity未關閉

3、讀取目錄

import java.io.File;
public class Test1 {
 public static void main(String[] args) {
  String path="d:/";
  File file=new File(path);
  File[] tempList = file.listFiles();
  System.out.println("該目錄下對象個數:"+tempList.length);
  for (int i = 0; i < tempList.length; i++) {
   if (tempList[i].isFile()) {
    System.out.println("文     件:"+tempList[i]);
   }
   if (tempList[i].isDirectory()) {
    System.out.println("文件夾:"+tempList[i]);
   }
  }
 }
}

4、一些總結
1.寫程序的時候最後要加try catch
2.回執、數據在使用前要判空
3.更新之前要查看修改處
4.別人交付的東西要查看修改的地方
5.不懂不會的,先暫停去做其他的事情,都完了在攻克難題
6.仔細覈對用戶需求
7.用系統函數簡化算法。
8.要考慮刪除和確定之後去往何處,選擇一個最佳的去處
9.當做多種值的判斷時用boolean更好,比如週期、圖片的選中
10.做圖片庫的選中時最好用tooglebutton,比button和check更好
11.當修改公共類的時候,如對一個項目中的AlertDialog、PopWindows做修改、添加時應考慮到增加判斷,從而不讓同樣使用這個AlertDialog的地方產生bug。
(如增加了必要的監聽時可以通過做null判斷,解決沒有賦值併產生空指針異常的問題。)
12.不在線不能操作的數據也應當顯示,點擊這類數據時可以不跳轉,需要提示用戶不在線

5、表達多個true/false時,可用一個string 8位的0/1值來表達,在傳輸時能節省流量
如String str=”00000”

    if(true){
        str+="0";
    }else{
        str+="1";
    }

6、彈出框
server彈出的dialog需要賦予
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));

7、查看sha1
自定義keystore
keytool -list -v -keystore elco_develop_key.jks
輸入密碼

8、組建接入問題:
methodscount.com 來查詢常用庫的方法數。
功能少的時候選方法少的庫,從而減少項目負擔

9、內存
1)使用Boolean的全局變量不要new Boolean()
2)Integer緩存了-128~127這256個數字,不要使用new Integer
3)用StringBuffer替代+
4)哈希表,見諒不要用於緩存,可以使用開源的ehcache,oscache通過FIFO,MRU等緩存算法來緩存從而達到提高系統運行速度的目的
5)避免過審的類層次結構和過深的方法調用(佔內存)
6)變量在用到的時候在定義和實例化,範圍能小盡量小,多次使用的String可以用全局常量
7)儘量避免使用static,可用final來替代
8)有向圖管理進程精度高,效率低
9)內存回收置空
List myList=new ArrayList();
for (int i=1;i<100; i++) {
Object o=new
Object();
myList.add(o);
o=null;
}
//此時,所有的Object對象都沒有被釋放,因爲變量myList引用這些對象。
當myList後來不再用到,將之設爲null,釋放所有它引用的對象。之後GC便會回收這些對象佔用的內存。

10、內存泄漏檢查工具
開發人員將根據這些信息判斷程序是否有內存泄漏問題。這些工具包括Optimizeit
Profiler,JProbe Profiler,JinSight , Rational 公司的Purify等。
但最廣泛應用的是LeakCanary

11、java程序設計中有關內存管理的經驗
1.最基本的建議是儘早釋放無用對象的引用。如對象置空
注:如果a 是方法的返回值,不要做這樣的處理,否則你從該方法中得到的返回值永遠爲空,而且這種錯誤不易被發現、排除
2.儘量少用finalize函數。它會加大GC的工作量。
3.如果需要使用經常用到的圖片,可以使用soft應用類型。它儘可能把圖片保存在內存中
4.注意集合數據類型,包括數組、樹、圖、鏈表等數據結構,這些數據結構對GC來說,回收更爲複雜。
5.儘量避免在類的默認構造器中創建、初始化大量的對象,防止在調用其自類的構造器時造成不必要的內存資源浪費
6.儘量避免強制系統做垃圾內
7.儘量避免顯式申請數組空間
8.儘量做遠程方法調用類應用開發時使用瞬間值變量,除非遠程調用端需要獲取該瞬間值變量的值。
9.儘量在合適的場景下使用對象池技術以提高系統性能。存的回收,增長系統做垃圾回收的最終時間

12、TouchMode
requestfocus() view的這個操作是將焦點轉移到調用此方法的父控件上

13、線程和進程
線程
android:MainThread,WorkThread
進程
Active Progress
Visable Progress
Service Progress
Background Progress
Empty Progress

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章