Android performance improved If you didn't forget some issues [Part1]

Có những thời điểm chúng ta khó khăn trong việc kiểm soát việc ứng dụng chạy "Đúng" nhưng rất chậm, bài toán lúc này là Performance ? Khi ứng dụng đã hoàn thành, việc đào bới lại code để thay đổi hiệu năng thực sự nó rất khủng khiếp. Bản thân mình đã có những lúc gặp tình trạng này và mong muốn tìm ra cách nào đó để cải thiện được tình thế !!! Trong bài viết này mình sẽ giới thiệu với các bạn những lỗi cần tránh trong quá trình phát triển ứng dụng, trải nghiệm thêm những cách làm mới và dĩ nhiên rồi Android Performance sẽ thay đổi đáng kể đó (len)

Một số khuyến cáo của Google

  1. Không cấp phát bộ nhớ hoặc khởi tạo Objects không cần thiết
  2. Không sử dụng internal Getter/Setter
  3. Sử dụng hợp lý static/final
  4. Hạn chế dùng float, tốt hơn nên là double
  5. Sử dụng thư viện chuẩn và tăng cường vòng lặp

Thói quen thường biết về Getter - Setter

Getter/Setter method

public class People {
    
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Truy cập trực tiếp

public String name;

Bạn vẫn đang sử dụng cách nào ??? Sẽ không ít người chọn cách số 1, vậy trên thực tế performance của 2 cách làm trên như thế nào. Để lựa chọn cách làm phù hợp chúng ta cùng nhìn kết quả thống kê dưới đây nhé !

Kết quả :

Khai báo biến với kiểu Static - Final

- Biến thông thường :

public int mType;

- Biến static

public static int mType;

- Hằng số thông thường:

public final String EXTRA_USER = "user_data";
  • Hằng số static
public static final String EXTRA_USER = "user_data";

Với những cách khởi tạo biến như trên để có được đáp án cho bài toán performance nào tốt nhất thì chúng ta cần đo xem tốc độ truy xuất của chúng là bao nhiêu ms dưới đây là kết quả.

** Kết quả:**

Phương thức static - non static

Non-static

public void initUserData() {
        //Do something
    }

Static

public static void initUserData() {
        //Do something
    }

Kết quả thực nghiệm:

Lưu ý khi khởi tạo phương thức truy cập

Truy cập đa phương thức

public void changeDataInput() {
        changeDataInput1();
    }
    
    public void changeDataInput1() {
        changeDataInput2();
    }

    public void changeDataInput2() {
        changeDataInput3();
    }

    public void changeDataInput3() {
        //DO something
    }

Truy cập đơn phương thức

public void changeDataInput3() {
        //DO something
    }

Kết quả thực nghiệm:

Phương thức đa thừa kế

Điều này thường được khai báo khi chúng ta thừa kế từ nhiều class khác nhau có chung 1 số đặc điểm và tận dụng lại code của người trước đó đã viết. Ví dụ chi tiết dưới đây:

public class MainClass {
        protected void getDataResponse() {
            //Do something
        }
    }

    public class SubClass1 extends MainClass {
        @Override
        protected void getDataResponse() {
            //Do Something
        }
    }
    
    public class SubClass2 extends SubClass1 {
        @Override
        protected void getDataResponse() {
            //Do something
        }
    }
    
    SubClass2 mSubClass2 = new SubClass2();
    
    private void callApiSuccess() {
        mSubClass2.getDataResponse();
    }

Cùng so sánh với cách làm khi truy cập phương thức trực tiếp các bạn nhé.

public class MainClass {
        protected void getDataResponse() {
            //Do something
        }
    }

    MainClass mMainClass = new MainClass();

    private void callApiSuccess() {
        mMainClass.getDataResponse();
    }

Kết quả thực nghiệm:

Tổng kết

Vậy là chúng ta đã cùng nhau đi qua những lưu ý của GOOGLE khuyến cáo và biết được những thói quen của mình nên cải thiện điều gì để sản phẩm - ứng dụng ngày càng có hiệu năng tốt hơn. Hy vọng rằng bài viết này sẽ hữu ích cho các bạn và hẹn gặp các bạn trong Part 2 với nhiều điều thú vị hơn nữa nhé !!! Happy coding....