android中jni,內存優化,設計模式總結

studio使用jni步驟總結:
創建native方法
編譯一下生成class文件
對應的class文件生成.h文件(也就是C語言的頭文件)
在main文件夾下建立jni目錄,然後將頭文件拷貝到裏面
在jni目錄下建立c文件,並引入生成的頭文件,然後實現頭文件中的方法
在創建native方法的類中引入生成的so文件,然後調用即可

android內存優化:
1.activity中複寫onTrimMemory方法,內存不足的情況下可以清空緩存的數據
2.使用android推薦的SparsArray等集合來代替Arraylist的使用
3.避免過多的創建對象,一個對象佔內存大約500字節,每個對象佔十幾個字節,過多的創建會引起內存不足,在類中避免調用get和set方法(谷歌不推薦,這樣效率很低)
4.對於bitmap來說,在系統堆棧中是以像素點來存儲的,按照ARGB來編碼,每個像素點佔4個字節,這樣算下來會佔用很多內存,因此不要過多的加載bitmap
5.使用增強for循環來提高效率,儘量使用android封裝好的api
6.有時候靜態由於抽象,當我們只是要調用某個類中的方法是,可以將此方法聲明成靜態的,這樣運行速度會提高15%-20%,也避免了對象的反覆創建。
7.關於service,在應用中如果沒有必要,不要一直保持service的開啓狀態,只要在需要的時候纔開始服務,在任務結束的是時候將service停止。谷歌推薦的是使用IntenService,
因爲InetenteService的會在任務完成後將服務停止。
8.對於依賴注入框架來說還是儘量不要使用,因爲依賴注入會很耗時,而且在依賴注入的時候會建立很多不需要的對象,這些對象很長時間不會被銷燬,很佔我們的內存。最好的辦法
就是寫findviewById()方法。
9.關於java中的垃圾回收機制:不需要我們自己去調用,但是可以利用垃圾回收機制來檢測我們的程序,在ddms中查看gc模塊,監測手機內存的變化,反覆運行程序,如果內存一直升高,
那麼就內存泄漏了,這時候檢驗我們的代碼即可
10.在拼接字符串的時候,儘量不要使用+號 ,這樣會多創建對象。而且拼接的效率也很差。如果有這一需求,可以使用stirngbuffer來拼接
設計模式之
1.單例模式:此模式可以保證對象的唯一性,避免了
3。裝飾者模式:這個模式是將某個類傳遞給裝飾類後,在其內部做改變
4.組合模式:所謂組合模式就是將共同屬性的加入集合中進行組合,然後在使用的時候,將集合遍歷。
5.模板模式:定義一個算法的骨架,然後將一些步驟延遲到子類中,這樣子類可以改變算法。說白了就是定義一個抽象類,然後子類繼承抽象類,根據需要重寫方法
6.builder模式。經典的builder模式重點在於抽象出對象創建的步驟,通過構造方法來減少get或set方法的使用,但是android中的builder模式是減少對象創建過程中構造函數的重載數量而使代碼的可讀性更加。
因爲builder模式比較常用,但是總結的較少,下面就同我就通過代碼來簡單的做個總結

public class Person {

    private final String  name;
    private final  int age;
    private final  String telPhone;
    private final  String sex;

    //構造函數私有化
    private  Person(PersonBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.telPhone = builder.telPhone;
        this.sex = builder.sex;
    }

    //person中只有get方法 
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getTelPhone() {
        return telPhone;
    }

    public String getSex() {
        return sex;
    }



    public static class PersonBuilder{
        private final String  name;
        private final  int age;
        private String telPhone;
        private String sex;
        //這是必填的項目
        public PersonBuilder(String name, int age) {
            this.name = name;
            this.age = age;
        }
        //通過builder對其他屬性進行設置
        public  PersonBuilder telPhone(String telPhone){
            this.telPhone = telPhone;
            return this;
        }
        public  PersonBuilder sex(String sex){
            this.sex = sex;
            return this;
        }
        @Override
        public String toString() {
            return this.name+this.age+this.telPhone+this.sex;
        }
    }
}
以上就是android中常用的builder模式的簡單應用,如有不足,歡迎指出。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章